Files
plex-api-spec/plex-api-spec.yaml
2025-10-12 01:55:05 -05:00

14971 lines
583 KiB
YAML

openapi: 3.1.1
info:
title: Plex Media Server
version: 1.1.1
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
- url: "https://{IP-description}.{identifier}.plex.direct:{port}"
variables:
identifier:
description: The unique identifier of this particular PMS
default: 0123456789abcdef0123456789abcdef
IP-description:
description: A `-` separated string of the IPv4 or IPv6 address components
default: 1-2-3-4
port:
description: The Port number configured on the PMS. Typically (`32400`).
default: '32400'
- 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"
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"
default: '32400'
- url: "{full_server_url}"
variables:
server_url:
description: The full manual URL to access the PMS
default: http://localhost:32400
security:
- token:
- shared user
- admin
x-speakeasy-globals:
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"
tags:
- name: Activities
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: 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
description: API Operations against the Collections
- name: Content
description: The actual content of the media provider
- name: Devices
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.
Example SSDP output
```
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:plex-tv:device:Media:1</deviceType>
<friendlyName>Turing Hopper 3000</friendlyName>
<manufacturer>Plex, Inc.</manufacturer>
<manufacturerURL>https://plex.tv/</manufacturerURL>
<modelDescription>Turing Hopper 3000 Media Grabber</modelDescription>
<modelName>Plex Media Grabber</modelName>
<modelNumber>1</modelNumber>
<modelURL>https://plex.tv</modelURL>
<UDN>uuid:42fde8e4-93b6-41e5-8a63-12d848655811</UDN>
<serviceList>
<service>
<URLBase>http://10.0.0.5:8088</URLBase>
<serviceType>urn:plex-tv:service:MediaGrabber:1</serviceType>
<serviceId>urn:plex-tv:serviceId:MediaGrabber</serviceId>
</service>
</serviceList>
</device>
</root>
```
- 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.
- name: Download Queue
description: API Operations against the Download Queue
- name: DVRs
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
- name: Events
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.
- name: General
description: General endpoints for basic PMS operation not specific to any media provider
- name: Hubs
description: The hubs within a media provider
- name: Library
description: Library endpoints which are outside of the Media Provider API. Typically this is manipulation of the library (adding/removing sections, modifying preferences, etc).
- name: Library Collections
description: Endpoints for manipulating collections. In addition to these endpoints, `/library/collections/:collectionId/X` will be rerouted to `/library/metadata/:collectionId/X` and respond to those endpoints as well.
x-displayName: 'Library: Collections'
- name: Library Playlists
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
- 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."
- name: Playlist
description: Media playlists that can be created and played back
- 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.
- name: Rate
description: Operations for rating media items (thumbs up/down, star ratings, etc.)
- name: Search
description: The search feature within a media provider
- 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
- name: Timeline
description: The actions feature within a media provider
- name: Transcoder
description: API Operations against the Transcoder
- name: UltraBlur
description: Service provided to compute UltraBlur colors and images.
- name: Updater
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.
x-tagGroups:
- name: General
tags:
- General
- Library
- Library Playlists
- Library Collections
- Status
- Activities
- Updater
- Butler
- Events
- Log
- Preferences
- Download Queue
- UltraBlur
- Transcoder
- name: Playback & Sessions
tags:
- Status
- Timeline
- Play Queue
- Transcoder
- name: Media Provider
tags:
- Provider
- Content
- Hubs
- Search
- Rate
- Playlist
- Play Queue
- Timeline
- name: DVR
tags:
- DVRs
- Devices
- EPG
- Subscriptions
- Live TV
paths:
/:
get:
summary: Get PMS info
operationId: getServerInfo
description: Information about this PMS setup and configuration
tags:
- General
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'
/:/eventsource/notifications:
get:
summary: Connect to Eventsource
operationId: getNotifications
description: Connect to the event source to get a stream of events
tags:
- Events
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: filter
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).
- `filters=foo,bar`: Only the foo and bar event types.
- `filters=`: All events types.
- `filters=-foo,bar`: All event types except foo and bar.
in: query
schema:
type: array
items:
type: string
responses:
'200':
description: OK
content:
application/octet-stream:
schema:
format: binary
type: string
/:/prefs:
get:
summary: Get all preferences
operationId: getAllPreferences
description: Get the list of all preferences
tags:
- Preferences
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithSettings'
put:
summary: Set preferences
operationId: setPreferences
description: Set a set of preferences in query parameters
tags:
- Preferences
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: prefs
in: query
required: true
schema:
type: object
example:
FriendlyName: My Server
ScheduledLibraryUpdateInterval: 3600
sendCrashReports: 1
responses:
'200':
$ref: '#/components/responses/200'
'400':
description: Attempt to set a preferences that doesn't exist
content:
text/html: {}
'403':
description: Attempt to set a preferences that doesn't exist
content:
text/html: {}
/:/prefs/get:
get:
summary: Get a preferences
operationId: getPreference
description: Get a single preference and value
tags:
- Preferences
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 preference to fetch
in: query
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithSettings'
'404':
description: No preference with the provided name found.
content:
text/html: {}
/:/rate:
put:
summary: Rate an item
operationId: setRating
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"
- $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: identifier
description: The identifier of the media provider containing the media to rate. Typically `com.plexapp.plugins.library`
in: query
required: true
schema:
type: string
- name: key
description: The key of the item to rate. This is the `ratingKey` found in metadata items
in: query
required: true
schema:
type: string
- name: rating
description: The rating to give the item.
in: query
required: true
schema:
maximum: 10
minimum: 0
type: number
- name: ratedAt
description: The time when the rating occurred. If not present, interpreted as now.
in: query
required: false
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/200'
'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: {}
'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: {}
/:/scrobble:
put:
summary: Mark an item as played
operationId: markPlayed
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"
- $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: identifier
description: The identifier of the media provider containing the media to rate. Typically `com.plexapp.plugins.library`
in: query
required: true
schema:
type: string
- name: key
description: The key of the item to rate. This is the `ratingKey` found in metadata items
in: query
required: false
schema:
type: string
- name: uri
description: The URI of the item to mark as played. See intro for description of the URIs
in: query
required: false
schema:
type: string
responses:
'200':
$ref: '#/components/responses/200'
'400':
description: Bad Request. Can occur when parameters are of the wrong type, or missing
content:
text/html: {}
'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: {}
/:/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).
tags:
- 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: key
description: The details key for the item.
in: query
schema:
type: string
example: /foo
- name: ratingKey
description: The rating key attribute for the item.
in: query
schema:
type: string
example: xyz
- name: state
description: The current state of the media.
in: query
schema:
type: string
enum:
- stopped
- buffering
- playing
- paused
example: playing
- name: playQueueItemID
description: If playing media from a play queue, the play queue's ID.
in: query
schema:
type: string
example: 123
- name: time
description: The current time offset of playback in ms.
in: query
schema:
type: integer
example: 0
- name: duration
description: The total duration of the item in ms.
in: query
schema:
type: integer
example: 10000
- name: continuing
description: When state is `stopped`, a flag indicating whether or not the client is going to continue playing anothe item.
in: query
schema:
$ref: "#/components/schemas/BoolInt"
example: 1
- name: updated
description: Used when a sync client comes online and is syncing media timelines, holds the time at which the playback state was last updated.
in: query
schema:
type: integer
example: 14200000
- name: offline
description: Also used by sync clients, used to indicate that a timeline is being synced from being offline, as opposed to being "live".
in: query
schema:
$ref: "#/components/schemas/BoolInt"
example: 1
- name: timeToFirstFrame
description: Time in seconds till first frame is displayed. Sent only on the first playing timeline request.
in: query
schema:
type: integer
example: 1000
- name: timeStalled
description: Time in seconds spent buffering since last request.
in: query
schema:
type: integer
example: 1000
- name: bandwidth
description: Bandwidth in kbps as estimated by the client.
in: query
schema:
type: integer
example: 100
- name: bufferedTime
description: Amount of time in seconds buffered by client. Omit if computed by `bufferedSize` below.
in: query
schema:
type: integer
example: 100
- name: bufferedSize
description: Size in kilobytes of data buffered by client. Omit if computed by `bufferedTime` above
in: query
schema:
type: integer
example: 1024
- name: X-Plex-Client-Identifier
description: Unique per client.
in: header
required: true
schema:
type: string
- 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:
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/ServerConfiguration'
- properties:
Bandwidths:
description: A list of media times and bandwidths when trascoding is using with auto adjustment of bandwidth
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
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
'400':
$ref: '#/components/responses/400'
/:/unscrobble:
put:
summary: Mark an item as unplayed
operationId: unscrobble
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"
- $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: identifier
description: The identifier of the media provider containing the media to rate. Typically `com.plexapp.plugins.library`
in: query
required: true
schema:
type: string
- name: key
description: The key of the item to rate. This is the `ratingKey` found in metadata items
in: query
required: false
schema:
type: string
- name: uri
description: The URI of the item to mark as played. See intro for description of the URIs
in: query
required: false
schema:
type: string
responses:
'200':
$ref: '#/components/responses/200'
'400':
description: Bad Request. Can occur when parameters are of the wrong type, or missing
content:
text/html: {}
'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:
get:
summary: Connect to WebSocket
operationId: connectWebSocket
description: Connect to the web socket to get a stream of events
tags:
- Events
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: filter
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).
- `filters=foo,bar`: Only the foo and bar event types.
- `filters=`: All events types.
- `filters=-foo,bar`: All event types except foo and bar.
in: query
schema:
type: array
items:
type: string
responses:
'200':
description: OK
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
content:
application/json:
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
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
/hubs:
get:
summary: Get global hubs
operationId: getAllHubs
description: Get the global hubs in this PMS
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"
- $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:
'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/continueWatching:
get:
summary: Get the continue watching hub
operationId: getContinueWatching
description: Get the global continue watching hub
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"
- $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
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"
- $ref: '#/components/parameters/count'
- name: identifier
description: If provided, limit to only specified hubs
in: query
required: true
schema:
type: array
items:
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
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)
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"
- $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).
- `<hub identifier>`: If the reason for the result is due to a result in another hub, the source hub identifier is returned. For example, if the search is for "dylan" then Bob Dylan may be returned as an artist result, an a few of his albums returned as album results with a reason code of `artist` (the identifier of that particular hub). Or if the search is for "arnold", there might be movie results returned with a reason of `actor`
- `reasonTitle`: The string associated with the reason code. For a section reason, it'll be the section name; For a hub identifier, it'll be a string associated with the match (e.g. `Arnold Schwarzenegger` for movies which were returned because the search was for "arnold").
- `reasonID`: The ID of the item associated with the reason for the result. This might be a section ID, a tag ID, an artist ID, or a show ID.
This request is intended to be very fast, and called as the user types.
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
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
'400':
description: A required parameter was not given, the wrong type, or wrong value
content:
text/html: {}
'404':
description: Search restrictions result in no possible items found (such as searching no sections)
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.
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
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
'400':
description: A required parameter was not given, the wrong type, or wrong value
content:
text/html: {}
/identity:
get:
summary: Get PMS identity
operationId: getIdentity
description: Get details about this PMS's identity
tags:
- General
security:
- {}
responses:
'200':
description: OK
content:
application/json:
schema:
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:
get:
summary: Get all items in library
operationId: getLibraryItems
description: Request all metadata items according to a query.
tags:
- Library
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/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'
/library/caches:
delete:
summary: Delete library caches
operationId: deleteCaches
description: Delete the hub caches so they are recomputed on next request
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
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 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'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithMetadata'
'400':
description: The uri is missing for a smart collection or the section could not be found
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.
tags:
- Library
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 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
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/matches:
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
tags:
- Library
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'
- 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
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/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.
tags:
- Library
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
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'
content:
application/json:
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
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: 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'
'400':
description: Section cannot be created due to bad parameters in request
content:
text/html: {}
/library/sections/all/refresh:
delete:
summary: Stop refresh
operationId: stopAllRefreshes
description: Stop all refreshes across all sections
tags:
- Library
security:
- token:
- admin
responses:
'200':
$ref: '#/components/responses/requestHandler_slash-get-responses-200'
/library/sections/prefs:
get:
summary: Get section prefs
operationId: getSectionsPrefs
description: Get a section's preferences for a metadata type
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: 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/requestHandler_slash-get-responses-200'
'400':
description: type not provided or not an integer
content:
text/html: {}
/library/sections/refresh:
post:
summary: Refresh all sections
operationId: refreshSectionsMetadata
description: Tell PMS to refresh all section metadata
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: 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
content:
text/html: {}
/library/tags:
get:
summary: Get all library tags of a type
operationId: getTags
description: Get all library tags of a type
tags:
- Library
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:
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:
get:
summary: Get DVRs
operationId: listDVRs
description: Get the list of all available DVRs
tags:
- DVRs
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/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
tags:
- DVRs
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: 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:
get:
summary: Compute the best channel map
operationId: computeChannelMap
description: Compute the best channel map, given device and lineup
tags:
- EPG
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: 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
content:
text/html: {}
'500':
description: Failed to compute channel map
content:
text/html: {}
/livetv/epg/channels:
get:
summary: Get channels for a lineup
operationId: getChannels
description: Get channels for a lineup within an EPG provider
tags:
- EPG
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 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
content:
text/html: {}
/livetv/epg/countries:
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
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
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:
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
type: array
type: object
type: object
/livetv/epg/languages:
get:
summary: Get all languages
operationId: getAllLanguages
description: Returns a list of all possible languages for EPG data.
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
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:
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:
get:
summary: Compute the best lineup
operationId: getLineup
description: Compute the best lineup, given lineup group and device
tags:
- EPG
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: 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
schema:
type: string
'404':
description: No device or provider with the identifier was found
content:
text/html: {}
'500':
description: Could not get device's channels
content:
text/html: {}
/livetv/epg/lineupchannels:
get:
summary: Get the channels for mulitple lineups
operationId: getLineupChannels
description: Get the channels across multiple lineups
tags:
- EPG
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:
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
content:
text/html: {}
/livetv/sessions:
get:
summary: Get all sessions
operationId: getSessions
description: Get all livetv sessions and metadata
tags:
- Live TV
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'
/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.
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
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'
/log/networked:
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
tags:
- Log
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'
'403':
description: User doesn't have permission
content:
text/html: {}
/media/grabbers:
get:
summary: Get available grabbers
operationId: getAvailableGrabbers
description: Get available grabbers visible to the server
tags:
- Devices
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:
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:
get:
summary: Get all devices
operationId: listDevices
description: Get the list of all devices present
tags:
- Devices
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'
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.
tags:
- Devices
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'
'400':
$ref: '#/components/responses/400'
/media/grabbers/devices/discover:
post:
summary: Tell grabbers to discover devices
operationId: discoverDevices
description: Tell grabbers to discover devices
tags:
- Devices
security:
- token:
- admin
responses:
'200':
description: OK
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
content:
application/json:
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.
tags:
- Provider
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'
'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
responses:
'200':
$ref: '#/components/responses/200'
/media/subscriptions:
get:
summary: Get all subscriptions
operationId: getAllSubscriptions
description: Get all subscriptions and potentially the grabs too
tags:
- Subscriptions
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"
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'
'403':
description: User cannot access DVR on this server
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)
tags:
- Subscriptions
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
- 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:
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- properties:
MediaSubscription:
items:
$ref: '#/components/schemas/MediaSubscription'
type: array
type: object
type: object
'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
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
schema:
type: string
content:
text/html: {}
'403':
description: User cannot access DVR on this server
content:
text/html: {}
/media/subscriptions/scheduled:
get:
summary: Get all scheduled recordings
operationId: getScheduledRecordings
description: Get all scheduled recordings across all subscriptions
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
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
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:
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
content:
text/html: {}
/photo/:/transcode:
get:
summary: Transcode an image
operationId: transcodeImage
description: Transcode an image, possibly changing format or size
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"
- 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
content:
image/jpeg:
schema:
format: binary
type: string
image/png:
schema:
format: binary
type: string
image/x-portable-pixmap:
schema:
format: binary
type: string
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
/playlists:
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.
tags:
- Playlist
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: playlistType
description: Limit to a type of playlist
in: query
schema:
type: string
enum:
- audio
- video
- photo
- $ref: '#/components/parameters/smart'
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'
post:
summary: Create a Playlist
operationId: createPlaylist
description: Create a new playlist. By default the playlist is blank.
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
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithPlaylistMetadata'
'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.
tags:
- Library Playlists
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'
'403':
$ref: '#/components/responses/200'
'500':
description: The playlist could not be imported
content:
text/html: {}
/playQueues:
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
tags:
- 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: 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
- 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:
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
'400':
$ref: '#/components/responses/400'
/security/resources:
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.
tags:
- General
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:
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
'400':
description: A query param is missing or the wrong value
content:
text/html: {}
'403':
description: Invalid or no token provided or a transient token could not be created
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
tags:
- General
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
- 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
'400':
description: A query param is missing or the wrong value
content:
text/html: {}
'403':
description: Invalid or no token provided or a transient token could not be created
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.
tags:
- UltraBlur
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:
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.
content:
text/html: {}
'500':
description: The server was unable to successfully extract the UltraBlur colors.
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"
- $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:
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.
in: query
schema:
$ref: "#/components/schemas/BoolInt"
example: 1
responses:
'200':
description: OK
content:
image/png:
schema:
format: binary
type: string
'400':
description: Requested width and height parameters are out of bounds (maximum 3840 x 2160)
content:
text/html: {}
/status/sessions:
get:
summary: List Sessions
operationId: listSessions
description: List all current playbacks on this server
tags:
- Status
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:
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:
get:
summary: Get background tasks
operationId: getBackgroundTasks
description: Get the list of all background tasks
tags:
- Status
security:
- token:
- admin
responses:
'200':
description: OK
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:
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.
tags:
- 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"
- 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
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:
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
type: array
type: object
type: object
/status/sessions/terminate:
post:
summary: Terminate a session
operationId: terminateSession
description: Terminate a playback session kicking off the user
tags:
- Status
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'
'401':
description: Server does not have the feature enabled
content:
text/html: {}
'403':
description: sessionId is empty
content:
text/html: {}
'404':
description: Session not found
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.
tags:
- Updater
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 <Release> 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: {}
'400':
description: This system cannot install updates
content:
text/html: {}
'500':
description: The update process failed to start
content:
text/html: {}
/updater/check:
put:
summary: Checking for updates
operationId: checkUpdates
description: Perform an update check and potentially download
tags:
- Updater
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'
/updater/status:
get:
summary: Querying status of updates
operationId: getUpdatesStatus
description: Get the status of updating the server
tags:
- Updater
security:
- token:
- admin
responses:
'200':
description: OK
content:
application/json:
schema:
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:
items:
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
enum:
- available
- downloading
- downloaded
- installing
- tonight
- skipped
- error
- notify
- done
type: string
version:
description: The version available
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:
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.
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'
- $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
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.
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: OK
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
content:
text/html: {}
'500':
description: Transcode failed to fallback
content:
text/html: {}
/{transcodeType}/:/transcode/universal/subtitles:
get:
summary: Transcode subtitles
operationId: transcodeSubtitles
description: Only transcode subtitle streams.
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'
- $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
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.
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
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'
'404':
$ref: '#/components/responses/404'
/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
tags:
- Activities
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'
'400':
description: Activity is not cancellable
content:
text/html: {}
'404':
description: No activity with the provided id is found
content:
text/html: {}
/butler/{task}:
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
tags:
- Butler
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: task
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'
'404':
description: No task with this name was found or no task with this name was running
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.
tags:
- Butler
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: task
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: {}
'202':
description: Task is already running
content:
text/html: {}
'404':
description: No task with this name was found
content:
text/html: {}
/downloadQueue/{queueId}:
get:
summary: Get a download queue
operationId: getDownloadQueue
description: |
Available: 0.2.0
Get a download queue by its id
tags:
- 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:
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
Add items to the download queue
tags:
- 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
- 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
- $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'
responses:
'200':
description: OK
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:
get:
summary: Get download queue items
operationId: listDownloadQueueItems
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"
- $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:
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'
'400':
description: No metadata with that id or permission is denied
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
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'
'400':
description: No metadata with that id or permission is denied
content:
text/html: {}
/hubs/metadata/{metadataId}/related:
get:
summary: Get related hubs
operationId: getRelatedHubs
description: Get the hubs for a metadata related to the provided metadata item
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'
'400':
description: No metadata with that id or permission is denied
content:
text/html: {}
/hubs/sections/{sectionId}:
get:
summary: Get section hubs
operationId: getSectionHubs
description: Get the hubs for a single section
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: sectionId
description: The section 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':
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
'400':
description: No section with that id or permission is denied
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
content:
text/html: {}
get:
summary: Get hubs
operationId: listHubs
description: Get the list of hubs including both built-in and custom
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
- 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:
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
content:
text/html: {}
post:
summary: Create a custom hub
operationId: createCustomHub
description: Create a custom hub based on a metadata item
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
- 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'
'400':
description: A hub could not be created with this metadata item
content:
text/html: {}
'403':
$ref: '#/components/responses/403'
'404':
description: Section id or metadata item was not found
content:
text/html: {}
/hubs/sections/{sectionId}/manage/move:
put:
summary: Move Hub
operationId: moveHub
description: Changed the ordering of a hub among others 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
- 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
content:
text/html: {}
/library/collections/{collectionId}/items:
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.
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: collectionId
description: The collection id
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithMetadata'
'404':
description: Collection not found
content:
text/html: {}
put:
summary: Add items to a collection
operationId: addCollectionItems
description: Add items to a collection by uri
tags:
- Library Collections
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'
'404':
description: Collection not found
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
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: 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'
'400':
description: Media items could not be deleted
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
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/MediaContainerWithMetadata'
put:
summary: Edit a metadata item
operationId: editMetadataItem
description: Edit metadata items setting fields
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: 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'
'400':
description: Media items could not be deleted
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
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: ids
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/200'
/library/metadata/{ids}/allLeaves:
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
tags:
- Library
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: 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/metadata/{ids}/analyze:
put:
summary: Analyze an item
operationId: analyzeMetadata
description: Start the analysis of a metadata item
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: 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'
/library/metadata/{ids}/chapterThumbs:
put:
summary: Generate thumbs of chapters for an item
operationId: generateThumbs
description: Start the chapter thumb generation for an item
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: ids
in: path
required: true
schema:
type: string
- name: force
in: query
required: false
schema:
$ref: "#/components/schemas/BoolInt"
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
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: ids
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"
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
tags:
- Library
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: 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'
post:
summary: Add to an item's extras
operationId: addExtras
description: Add an extra to a metadata item
tags:
- Library
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: 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
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)
tags:
- Library
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: 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:
format: binary
type: string
image/jpeg:
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
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: ids
in: path
required: true
schema:
type: string
- name: force
in: query
required: false
schema:
$ref: "#/components/schemas/BoolInt"
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
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: 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'
/library/metadata/{ids}/marker:
post:
summary: Create a marker
operationId: createMarker
description: Create a marker for this user on the metadata item
tags:
- Library
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: 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
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
'400':
description: Request parameters are bad, such as an `endTimeOffset` prior to the `startTimeOffset`
content:
text/html: {}
/library/metadata/{ids}/match:
put:
summary: Match a metadata item
operationId: matchItem
description: Match a metadata item to a guid
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: ids
in: path
required: true
schema:
type: string
- name: guid
in: query
schema:
type: string
- name: name
in: query
required: false
schema:
type: string
- name: year
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
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: ids
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
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: ids
in: path
required: true
schema:
type: string
- name: ids
in: query
explode: false
schema:
type: array
items:
type: string
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
tags:
- Library
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: 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
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
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: ids
in: path
required: true
schema:
type: string
- name: args
in: query
schema:
type: object
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
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: ids
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"
responses:
'200':
$ref: '#/components/responses/200'
/library/metadata/{ids}/related:
get:
summary: Get related items
operationId: getRelatedItems
description: Get a hub of related items to a metadata item
tags:
- Library
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: string
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:
get:
summary: Get similar items
operationId: listSimilar
description: Get a list of similar items to a metadata item
tags:
- Library
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: string
- $ref: '#/components/parameters/count'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithMetadata'
/library/metadata/{ids}/split:
put:
summary: Split a metadata item
operationId: splitItem
description: Split a metadata item into multiple items
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: ids
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/200'
/library/metadata/{ids}/subtitles:
get:
summary: Add subtitles
operationId: addSubtitles
description: Add a subtitle to a metadata item
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: ids
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:
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
tags:
- Library
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: string
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
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: ids
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/200'
/library/metadata/{ids}/users/top:
get:
summary: Get metadata top users
operationId: listTopUsers
description: Get the list of users which have played this item starting with the most
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: ids
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
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
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: 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'
/library/metadata/augmentations/{augmentationId}:
get:
summary: Get augmentation status
operationId: getAugmentationStatus
description: Get augmentation status and potentially wait for completion
tags:
- Library
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'
'401':
description: This augmentation is not owned by the requesting user
content:
text/html: {}
'404':
description: No augmentation found
content:
text/html: {}
/library/parts/{partId}:
put:
summary: Set stream selection
operationId: setStreamSelection
description: Set which streams (audio/subtitle) are selected by this user
tags:
- Library
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'
'400':
description: One of the audio or subtitle streams does not belong to this part
content:
text/html: {}
/library/people/{personId}:
get:
summary: Get person details
operationId: getPerson
description: Get details for a single actor.
tags:
- Library
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:
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:
get:
summary: Get media for a person
operationId: listPersonMedia
description: Get all the media for a single actor.
tags:
- Library
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'
'404':
$ref: '#/components/responses/404'
/library/sections/{sectionId}:
delete:
summary: Delete a library section
operationId: deleteLibrarySection
description: Delete a library section by id
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: sectionId
description: The 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
in: query
schema:
$ref: "#/components/schemas/BoolInt"
responses:
'200':
$ref: '#/components/responses/200'
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.'
tags:
- Library
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
schema:
$ref: "#/components/schemas/BoolInt"
responses:
'200':
description: OK
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:
type: boolean
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
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: sectionId
description: The 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
responses:
'200':
$ref: '#/components/responses/200'
'400':
description: Section cannot be created due to bad parameters in request
content:
text/html: {}
/library/sections/{sectionId}/albums:
get:
summary: Set section albums
operationId: getAlbums
description: Get all albums in a music section
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: sectionId
description: Section identifier
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
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-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
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"
- $ref: '#/components/parameters/mediaQuery'
- name: sectionId
description: The id of the section
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'
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
tags:
- Library
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 id of the 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
schema:
type: string
responses:
'200':
$ref: '#/components/responses/200'
'400':
description: The set of parameters are inconsistent or invalid values
content:
text/html: {}
'404':
description: A required item could not be found
content:
text/html: {}
'409':
description: Rename of a collection to a name that's already taken
content:
text/html: {}
/library/sections/{sectionId}/allLeaves:
get:
summary: Set section leaves
operationId: getAllLeaves
description: Get all leaves in a section (such as episodes in a show section)
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: sectionId
description: Section identifier
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$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-17'
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
/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
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: sectionId
description: Section identifier
in: path
required: true
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/200'
/library/sections/{sectionId}/arts:
get:
summary: Set section artwork
operationId: getArts
description: Get artwork for a library section
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: sectionId
description: Section identifier
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithArtwork'
/library/sections/{sectionId}/autocomplete:
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
tags:
- Library
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:
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'
'400':
description: A paramater is either invalid or missing
content:
text/html: {}
/library/sections/{sectionId}/categories:
get:
summary: Set section categories
operationId: getCategories
description: Get categories in a library section
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: sectionId
description: Section identifier
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithArtwork'
/library/sections/{sectionId}/cluster:
get:
summary: Set section clusters
operationId: getCluster
description: Get clusters in a library section (typically for photos)
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: sectionId
description: Section identifier
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithArtwork'
/library/sections/{sectionId}/collections:
get:
summary: Get collections in a section
operationId: getCollections
description: Get all collections in a section
tags:
- Library
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:
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
schema:
type: integer
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithMetadata'
/library/sections/{sectionId}/common:
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
tags:
- Library
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:
type: integer
- name: type
description: Item type
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
schema:
type: integer
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithMetadata'
'400':
$ref: '#/components/responses/400'
'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
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: sectionId
description: Section identifier
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
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
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: sectionId
description: Section identifier
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
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: sectionId
description: Section identifier
in: path
required: true
schema:
type: integer
responses:
'200':
description: The filters on the section
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
tags:
- Library
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:
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
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: sectionId
description: Section identifier
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
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: sectionId
description: Section identifier
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
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: sectionId
description: Section identifier
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
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)
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: sectionId
description: Section identifier
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
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
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: 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
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
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/MediaContainerWithMetadata'
/library/sections/{sectionId}/prefs:
get:
summary: Get section prefs
operationId: getSectionPreferences
description: Get the prefs for a section by id and potentially overriding the agent
tags:
- Library
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:
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
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: sectionId
description: Section identifier
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
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: sectionId
description: Section identifier
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
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: sectionId
description: Section identifier
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:
get:
summary: Get a section sorts
operationId: getAvailableSorts
description: Get the sort mechanisms available in a section
tags:
- Library
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:
type: integer
responses:
'200':
description: OK
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
tags:
- Library
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: streamId
description: The id of the stream
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:
application/json:
schema:
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)
type: string
type: object
type: object
'403':
$ref: '#/components/responses/responses-403'
'404':
$ref: '#/components/responses/responses-404'
/library/streams/{streamId}/loudness:
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
tags:
- Library
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: streamId
description: The id of the stream
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:
schema:
type: string
'403':
description: The media is not accessible to the user
content:
text/html: {}
'404':
description: The stream doesn't exist, or the loudness feature is not available on this PMS
content:
text/html: {}
/livetv/dvrs/{dvrId}:
delete:
summary: Delete a single DVR
operationId: deleteDVR
description: Delete a single DVR by its id (key)
tags:
- DVRs
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: dvrId
description: The ID of the DVR.
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
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:
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.
tags:
- DVRs
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: 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/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.
tags:
- DVRs
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: 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/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}/prefs:
put:
summary: Set DVR preferences
operationId: setDVRPreferences
description: Set DVR preferences by name avd value
tags:
- DVRs
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: dvrId
description: The ID of the DVR.
in: path
required: true
schema:
type: integer
- name: name
description: Set the `name` preference to the provided value
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/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:
delete:
summary: Tell a DVR to stop reloading program guide
operationId: stopDVRReload
description: Tell a DVR to stop reloading program guide
tags:
- DVRs
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: dvrId
description: The ID of the DVR.
in: path
required: true
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/200'
post:
summary: Tell a DVR to reload program guide
operationId: reloadGuide
description: Tell a DVR to reload program guide
tags:
- DVRs
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: dvrId
description: The ID of the DVR.
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
headers:
X-Plex-Activity:
description: The activity of the reload process
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
tags:
- Live 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: sessionId
description: The session id
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'
/media/grabbers/devices/{deviceId}:
delete:
summary: Remove a device
operationId: removeDevice
description: Remove a devices by its id along with its channel mappings
tags:
- Devices
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: deviceId
description: The ID of the device.
in: path
required: true
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:
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- properties:
message:
type: string
status:
type: integer
type: object
type: object
'404':
description: Device not found
content:
text/html: {}
get:
summary: Get device details
operationId: getDeviceDetails
description: Get a device's details by its id
tags:
- Devices
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: deviceId
description: The ID of the device.
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithDevice'
'404':
description: Device not found
content:
text/html: {}
put:
summary: Enable or disable a device
operationId: modifyDevice
description: Enable or disable a device by its id
tags:
- Devices
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: deviceId
description: The ID of the device.
in: path
required: true
schema:
type: integer
- name: enabled
description: Whether to enable the device
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:
message:
type: string
status:
type: integer
type: object
type: object
'404':
description: Device not found
content:
text/html: {}
/media/grabbers/devices/{deviceId}/channelmap:
put:
summary: Set a device's channel mapping
operationId: setChannelmap
description: Set a device's channel mapping
tags:
- Devices
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: deviceId
description: The ID of the device.
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.
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
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
tags:
- Devices
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: deviceId
description: The ID of the device.
in: path
required: true
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:
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
'404':
description: Device not found
content:
text/html: {}
/media/grabbers/devices/{deviceId}/prefs:
put:
summary: Set device preferences
operationId: setDevicePreferences
description: Set device preferences by its id
tags:
- Devices
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: deviceId
description: The ID of the device.
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:
delete:
summary: Tell a device to stop scanning for channels
operationId: stopScan
description: Tell a device to stop scanning for channels
tags:
- Devices
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: deviceId
description: The ID of the device.
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithDevice'
post:
summary: Tell a device to scan for channels
operationId: scan
description: Tell a device to scan for channels
tags:
- Devices
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: 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
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.
tags:
- Subscriptions
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: operationId
description: The ID of the operation.
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/200'
'403':
description: User is not owner of the grab and not the admin
content:
text/html: {}
'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
tags:
- Provider
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: provider
description: The ID of the media provider to delete
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/200'
'400':
$ref: '#/components/responses/400'
'403':
description: Cannot delete a provider which is a child of another provider
content:
text/html: {}
/media/subscriptions/{subscriptionId}:
delete:
summary: Delete a subscription
operationId: deleteSubscription
description: Delete a subscription, cancelling all of its grabs as well
tags:
- Subscriptions
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: subscriptionId
in: path
required: true
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/200'
'400':
$ref: '#/components/responses/400'
'403':
description: User cannot access DVR on this server or cannot access this subscription
content:
text/html: {}
'404':
$ref: '#/components/responses/404'
get:
summary: Get a single subscription
operationId: getSubscription
description: Get a single subscription and potentially the grabs too
tags:
- Subscriptions
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: subscriptionId
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
in: query
schema:
$ref: "#/components/schemas/BoolInt"
responses:
'200':
description: OK
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: {}
'404':
$ref: '#/components/responses/404'
put:
summary: Edit a subscription
operationId: editSubscriptionPreferences
description: Edit a subscription's preferences
tags:
- Subscriptions
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: subscriptionId
in: path
required: true
schema:
type: integer
- name: prefs
in: query
style: deepObject
schema:
type: object
example:
minVideoQuality: 720
responses:
'200':
description: OK
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: {}
'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
tags:
- Subscriptions
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: subscriptionId
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
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: {}
'404':
$ref: '#/components/responses/404'
/playlists/{playlistId}:
delete:
summary: Delete a Playlist
operationId: deletePlaylist
description: Deletes a playlist by provided id
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: playlistId
description: The ID of the playlist
in: path
required: true
schema:
type: integer
responses:
'204':
$ref: '#/components/responses/204'
'404':
description: Playlist not found (or user may not have permission to access playlist)
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.
tags:
- Playlist
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: playlistId
description: The ID of the playlist
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithPlaylistMetadata'
'404':
description: Playlist not found (or user may not have permission to access playlist)
content:
text/html: {}
put:
summary: Editing a Playlist
operationId: updatePlaylist
description: Edits a playlist in the same manner as [editing metadata](#tag/Provider/operation/metadataPutItem)
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: playlistId
description: The ID of the playlist
in: path
required: true
schema:
type: integer
responses:
'204':
$ref: '#/components/responses/204'
'404':
description: Playlist not found (or user may not have permission to access playlist)
content:
text/html: {}
/playlists/{playlistId}/generators:
get:
summary: Get a playlist's generators
operationId: getPlaylistGenerators
description: Get all the generators in a playlist
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: playlistId
description: The ID of the playlist
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
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
'404':
description: Playlist not found (or user may not have permission to access playlist) or generator 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.
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: playlistId
description: The ID of the playlist
in: path
required: true
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/slash-post-responses-200'
'400':
$ref: '#/components/responses/400'
'404':
description: Playlist not found (or user may not have permission to access playlist)
content:
text/html: {}
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.
tags:
- Playlist
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: playlistId
description: The ID of the playlist
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
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)
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.
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: playlistId
description: The ID of the playlist
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'
'400':
$ref: '#/components/responses/400'
'404':
description: Playlist not found (or user may not have permission to access playlist)
content:
text/html: {}
/playQueues/{playQueueId}:
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.
tags:
- 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: playQueueId
description: The ID of the play queue.
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'
'400':
$ref: '#/components/responses/400'
'404':
description: Play queue not found
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.
tags:
- 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: 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:
'200':
$ref: '#/components/responses/slash-post-responses-200'
'400':
$ref: '#/components/responses/400'
'404':
description: Play queue not found
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.
tags:
- 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: playQueueId
description: The ID of the play queue.
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
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
tags:
- 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: playQueueId
description: The ID of the play queue.
in: path
required: true
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/slash-post-responses-200'
'400':
$ref: '#/components/responses/400'
'404':
description: Play queue 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.
tags:
- 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: playQueueId
description: The ID of the play queue.
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithPlaylistMetadata'
'400':
$ref: '#/components/responses/400'
'404':
description: Play queue not found or current 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.
tags:
- 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: playQueueId
description: The ID of the play queue.
in: path
required: true
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/slash-post-responses-200'
'400':
$ref: '#/components/responses/400'
'404':
description: Play queue not found or current item not found
content:
text/html: {}
/status/sessions/history/{historyId}:
delete:
summary: Delete Single History Item
operationId: deleteHistory
description: Delete a single history item by id
tags:
- Status
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: historyId
description: The id of the history item (the `historyKey` from above)
in: path
required: true
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/MediaContainer'
'404':
description: History item not found
content:
text/html: {}
get:
summary: Get Single History Item
operationId: getHistoryItem
description: Get a single history item by id
tags:
- Status
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: historyId
description: The id of the history item (the `historyKey` from above)
in: path
required: true
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/historyAll-get-responses-200'
'404':
description: History item not found
content:
text/html: {}
/{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.
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'
- name: extension
description: "Extension \n"
in: path
required: true
schema:
type: string
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
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
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.
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: MPD file (see ISO/IEC 23009-1:2022), m3u8 file (see RFC 8216), or binary http stream
content:
application/vnd.apple.mpegurl:
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:
example: |
<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:mpeg:dash:schema:mpd:2011"
xmlns:xlink="http://www.w3.org/1999/xlink"
xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
type="static"
mediaPresentationDuration="PT0H10M34.5333S"
maxSegmentDuration="PT2S"
minBufferTime="PT10S">
<Period start="PT0S" id="0" duration="PT0H10M34.5333S">
<AdaptationSet segmentAlignment="true">
<SegmentTemplate timescale="1" duration="1" initialization="session/00lsab52ccmh9htfgwqz0o8k/$RepresentationID$/header" media="session/00lsab52ccmh9htfgwqz0o8k/$RepresentationID$/$Number$.m4s" startNumber="0">
</SegmentTemplate>
<Representation id="0" mimeType="video/mp4" codecs="avc1.640028" bandwidth="20000000" width="1920" height="1080">
</Representation>
</AdaptationSet>
<AdaptationSet segmentAlignment="true">
<SegmentTemplate timescale="1" duration="1" initialization="session/00lsab52ccmh9htfgwqz0o8k/$RepresentationID$/header" media="session/00lsab52ccmh9htfgwqz0o8k/$RepresentationID$/$Number$.m4s" startNumber="0">
</SegmentTemplate>
<Representation id="1" mimeType="audio/mp4" codecs="mp4a.40.2" bandwidth="256000" audioSamplingRate="48000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
</Representation>
</AdaptationSet>
</Period>
</MPD>
video/x-matroska:
schema:
format: binary
type: string
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
/downloadQueue/{queueId}/item/{itemId}/decision:
get:
summary: Grab download queue item decision
operationId: getItemDecision
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"
- $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
- name: itemId
description: The item ids
in: path
required: true
schema:
type: integer
example: 32
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithDecision'
'400':
description: The item is not in a state where a decision is available
content:
text/html: {}
/downloadQueue/{queueId}/item/{itemId}/media:
get:
summary: Grab download queue media
operationId: getDownloadQueueMedia
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"
- $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
- name: itemId
description: The item ids
in: path
required: true
schema:
type: integer
example: 32
responses:
'200':
description: The raw media file
'503':
description: |
![503](https://http.cat/503.jpg)
The queue item is not yet complete and is currently transcoding or waiting to transcode
headers:
Retry-After:
description: The estimated time before completion or -1 if unknown
schema:
type: integer
/downloadQueue/{queueId}/items/{itemId}:
delete:
summary: Delete download queue items
operationId: removeDownloadQueueItems
description: delete items from a download queue
tags:
- 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
- name: itemId
description: The item id
in: path
required: true
explode: false
schema:
type: array
items:
type: integer
example:
- 32
- 345
- 23
responses:
'200':
$ref: '#/components/responses/200'
get:
summary: Get download queue items
operationId: getDownloadQueueItems
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"
- $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
- name: itemId
description: The item ids
in: path
required: true
explode: false
schema:
type: array
items:
type: integer
example:
- 32
- 345
- 23
responses:
'200':
description: OK
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
/downloadQueue/{queueId}/items/{itemId}/restart:
post:
summary: Restart processing of items from the decision
operationId: restartProcessingDownloadQueueItems
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"
- $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
- name: itemId
description: The item ids
in: path
required: true
explode: false
schema:
type: array
items:
type: integer
example:
- 32
- 345
- 23
responses:
'200':
$ref: '#/components/responses/200'
/hubs/sections/{sectionId}/manage/{identifier}:
delete:
summary: Delete a custom hub
operationId: deleteCustomHub
description: Delete a custom hub from the server
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 change
in: path
required: true
schema:
type: integer
- name: identifier
description: The identifier of the hub to change
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/200'
'400':
description: The hub is not a custom hub
content:
text/html: {}
'403':
$ref: '#/components/responses/403'
'404':
description: The section or hub was not found
content:
text/html: {}
put:
summary: Change hub visibility
operationId: updateHubVisibility
description: Changed the visibility of a hub for both the admin and shared users
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 change
in: path
required: true
schema:
type: integer
- name: identifier
description: The identifier of the hub to change
in: path
required: true
schema:
type: string
- 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'
'403':
$ref: '#/components/responses/403'
'404':
description: Section id was not found
content:
text/html: {}
/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
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: collectionId
description: The collection id
in: path
required: true
schema:
type: integer
- name: updatedAt
description: The update time of the image. Used for busting cache.
in: path
required: true
schema:
type: integer
- $ref: '#/components/parameters/composite'
responses:
'200':
description: OK
content:
image/jpeg:
schema:
format: binary
type: string
'404':
description: Collection not found
content:
text/html: {}
/library/collections/{collectionId}/items/{itemId}:
put:
summary: Delete an item from a collection
operationId: deleteCollectionItem
description: Delete an item from a collection
tags:
- Library Collections
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: itemId
description: The item to delete
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithMetadata'
'400':
description: Item not found
content:
text/html: {}
'404':
description: Collection not found
content:
text/html: {}
/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
tags:
- Library Collections
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: itemId
description: The item to move
in: path
required: true
schema:
type: integer
- name: after
description: The item to move this item after. If not provided, this item will be moved to the beginning
in: query
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithMetadata'
'400':
description: Item not found
content:
text/html: {}
'404':
description: Collection not found
content:
text/html: {}
/library/media/{mediaId}/chapterImages/{chapter}:
get:
summary: Get a chapter image
operationId: getChapterImage
description: Get a single chapter image for a piece of media
tags:
- Library
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: mediaId
description: The id of the media item
in: path
required: true
schema:
type: integer
- name: chapter
description: The index of the chapter
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
image/jpeg:
schema:
format: binary
type: string
'404':
description: Either the media item or the chapter image was not found
content:
text/html: {}
/library/metadata/{ids}/{element}:
post:
summary: Set an item's artwork, theme, etc
operationId: setItemArtwork
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"
- $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: string
- name: element
in: path
required: true
schema:
type: string
enum:
- thumb
- art
- clearLogo
- banner
- poster
- theme
- name: url
description: The url of the new asset. If not provided, the binary of the asset must be provided in the post body.
in: query
schema:
type: string
responses:
'200':
$ref: '#/components/responses/200'
put:
summary: Set an item's artwork, theme, etc
operationId: updateItemArtwork
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"
- $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: string
- name: element
in: path
required: true
schema:
type: string
enum:
- thumb
- art
- clearLogo
- banner
- poster
- theme
- name: url
description: The url of the new asset.
in: query
schema:
type: string
responses:
'200':
$ref: '#/components/responses/200'
/library/metadata/{ids}/marker/{marker}:
delete:
summary: Delete a marker
operationId: deleteMarker
description: Delete a marker for this user on the metadata item
tags:
- Library
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: string
- name: marker
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/200'
'400':
description: Marker is not a bookmark
content:
text/html: {}
'404':
description: Marker could not be found
content:
text/html: {}
put:
summary: Edit a marker
operationId: editMarker
description: Edit a marker for this user on the metadata item
tags:
- Library
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: string
- name: marker
description: The id of the marker to edit
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':
$ref: '#/components/responses/post-responses-200'
'400':
$ref: '#/components/responses/responses-400'
'404':
description: The marker could not be found
content:
text/html: {}
/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
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: ids
in: path
required: true
schema:
type: string
- name: mediaItem
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'
'400':
description: Media item could not be deleted
content:
text/html: {}
'404':
description: Media item could not be found
content:
text/html: {}
/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
tags:
- Library
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 part id who's index is to be fetched
in: path
required: true
schema:
type: integer
- name: index
description: The type of index to grab.
in: path
required: true
schema:
type: string
enum:
- sd
- name: interval
description: The interval between images to return in ms.
in: query
schema:
type: integer
responses:
'200':
description: OK
content:
application/octet-stream:
schema:
format: binary
type: string
'404':
description: The part or the index doesn't exist or the interval is too small
content:
text/html: {}
/library/sections/{sectionId}/collection/{collectionId}:
delete:
summary: Delete a collection
operationId: deleteCollection
description: Delete a library collection from the PMS
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: sectionId
description: Section identifier
in: path
required: true
schema:
type: integer
- name: collectionId
description: Collection Id
in: path
required: true
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/200'
'404':
description: Collection not found
content:
text/html: {}
/library/sections/{sectionId}/composite/{updatedAt}:
get:
summary: Get a section composite image
operationId: getSectionImage
description: Get a composite image of images in this section
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: sectionId
description: Section identifier
in: path
required: true
schema:
type: integer
- name: updatedAt
description: The update time of the image. Used for busting cache.
in: path
required: true
schema:
type: integer
- $ref: '#/components/parameters/mediaQuery'
- $ref: '#/components/parameters/composite'
responses:
'200':
$ref: '#/components/responses/200'
/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.
tags:
- Library
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: streamId
description: The id of the stream
in: path
required: true
schema:
type: integer
- name: ext
description: This is not a part of this endpoint but documented here to satisfy OpenAPI
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/200'
'403':
description: This user cannot delete this stream
content:
text/html: {}
'500':
description: The stream cannot be deleted
content:
text/html: {}
get:
summary: Get a stream
operationId: getStream
description: Get a stream (such as a sidecar subtitle stream)
tags:
- Library
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: streamId
description: The id of the stream
in: path
required: true
schema:
type: integer
- name: ext
description: The extension of the stream. Required to fetch the `sub` portion of `idx`/`sub` subtitles
in: path
required: true
schema:
type: string
- name: encoding
description: The requested encoding for the subtitle (only used for text subtitles)
in: query
required: false
schema:
type: string
- name: format
description: The requested format for the subtitle to convert the subtitles to (only used for text subtitles)
in: query
required: false
schema:
type: string
- name: autoAdjustSubtitle
description: Whether the server should attempt to automatically adjust the subtitle timestamps to match the media
in: query
required: false
schema:
$ref: "#/components/schemas/BoolInt"
responses:
'200':
description: The stream in the requested format.
'403':
description: The media is not accessible to the user
content:
text/html: {}
'404':
description: The stream doesn't exist or has no data
content:
text/html: {}
'501':
description: The stream is not a sidecar subtitle
content:
text/html: {}
put:
summary: Set a stream offset
operationId: setStreamOffset
description: Set a stream offset in ms. This may not be respected by all clients
tags:
- Library
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: streamId
description: The id of the stream
in: path
required: true
schema:
type: integer
- name: ext
description: This is not a part of this endpoint but documented here to satisfy OpenAPI
in: path
required: true
schema:
type: string
- name: offset
description: The offest in ms
in: query
required: false
schema:
type: integer
responses:
'200':
description: The stream in the requested format.
'400':
description: The stream doesn't exist
content:
text/html: {}
/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
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
schema:
type: integer
- name: channel
description: The channel ID to tune
in: path
required: true
schema:
type: string
example: '2.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:
$ref: '#/components/schemas/MediaContainerWithMetadata'
'500':
description: Tuning failed
content:
text/html: {}
/livetv/dvrs/{dvrId}/devices/{deviceId}:
delete:
summary: Remove a device from an existing DVR
operationId: removeDeviceFromDVR
description: Remove a device from an existing DVR
tags:
- DVRs
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: dvrId
description: The ID of the DVR.
in: path
required: true
schema:
type: integer
- name: deviceId
description: The ID of the device to add.
in: path
required: true
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:
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 device to an existing DVR
operationId: addDeviceToDVR
description: Add a device to an existing DVR
tags:
- DVRs
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: dvrId
description: The ID of the DVR.
in: path
required: true
schema:
type: integer
- name: deviceId
description: The ID of the device to add.
in: path
required: true
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:
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/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
tags:
- EPG
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: country
description: 3 letter country code
in: path
required: true
schema:
type: string
- name: epgId
description: The `providerIdentifier` of the provider
in: path
required: true
schema:
type: string
- name: postalCode
description: The postal code for the lineups to fetch
in: query
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithLineup'
'404':
description: No provider with the identifier was found
content:
text/html: {}
/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
tags:
- EPG
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: country
description: 3 letter country code
in: path
required: true
schema:
type: string
- name: epgId
description: The `providerIdentifier` of the provider
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:
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- properties:
Country:
items:
properties:
key:
type: string
national:
type: boolean
title:
type: string
type:
type: string
type: object
type: array
type: object
type: object
'404':
description: No provider with the identifier was found
content:
text/html: {}
/livetv/sessions/{sessionId}/{consumerId}/index.m3u8:
get:
summary: Get a session playlist index
operationId: getSessionPlaylistIndex
description: Get a playlist index for playing this session
tags:
- Live 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: sessionId
description: The session id
in: path
required: true
schema:
type: string
- name: consumerId
description: The consumer id
in: path
required: true
schema:
type: string
responses:
'200':
description: Index playlist for playing HLS content
content:
application/vnd.apple.mpegurl: {}
'404':
description: Session or consumer not found
/media/grabbers/devices/{deviceId}/thumb/{version}:
get:
summary: Get device thumb
operationId: getThumb
description: Get a device's thumb for display to the user
tags:
- Devices
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: deviceId
description: The ID of the device.
in: path
required: true
schema:
type: integer
- name: version
description: A version number of the thumb used for busting cache
in: path
required: true
schema:
type: integer
responses:
'200':
description: The thumbnail for the device
'301':
description: The thumb URL on the device
'404':
description: No thumb found for this device
content:
text/html: {}
/playlists/{playlistId}/items/{generatorId}:
delete:
summary: Delete a Generator
operationId: deletePlaylistItem
description: Deletes an item from a playlist. Only works with dumb playlists.
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: playlistId
description: The ID of the playlist
in: path
required: true
schema:
type: integer
- name: generatorId
description: The generator item ID to delete.
in: path
required: true
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/slash-post-responses-200'
'400':
$ref: '#/components/responses/400'
'404':
description: Playlist not found (or user may not have permission to access playlist) or generator not found
content:
text/html: {}
get:
summary: Get a playlist generator
operationId: getPlaylistGenerator
description: Get a playlist's generator. Only used for optimized versions
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: playlistId
description: The ID of the playlist
in: path
required: true
schema:
type: integer
- name: generatorId
description: The generator item ID to delete.
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- properties:
Item:
items:
properties:
composite:
description: The composite thumbnail image path
type: string
Device:
properties:
profile:
type: string
type: object
id:
type: integer
Location:
properties:
librarySectionID:
type: integer
uri:
type: string
type: object
MediaSettings:
properties:
advancedSubtitles:
enum:
- auto
- burn
- none
- sidecar
- embedded
- segmented
type: string
audioBoost:
type: integer
audioChannelCount:
type: integer
autoAdjustQuality:
type: boolean
autoAdjustSubtitle:
type: boolean
directPlay:
type: boolean
directStream:
type: boolean
directStreamAudio:
type: boolean
disableResolutionRotation:
type: boolean
maxVideoBitrate:
type: integer
musicBitrate:
type: integer
peakBitrate:
type: integer
photoQuality:
maximum: 100
minimum: 0
type: integer
photoResolution:
type: string
secondsPerSegment:
type: integer
subtitles:
enum:
- auto
- burn
- none
- sidecar
- embedded
- segmented
type: string
subtitleSize:
type: integer
videoBitrate:
type: integer
videoQuality:
maximum: 100
minimum: 0
type: integer
videoResolution:
type: string
type: object
Policy:
properties:
scope:
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:
properties:
itemsCompleteCount:
type: integer
itemsCount:
type: integer
itemsSuccessfulCount:
type: integer
state:
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
'400':
$ref: '#/components/responses/400'
'404':
description: Playlist not found (or user may not have permission to access playlist) or generator not found
content:
text/html: {}
put:
summary: Modify a Generator
operationId: modifyPlaylistGenerator
description: Modify a playlist generator. Only used for optimizer
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: playlistId
description: The ID of the playlist
in: path
required: true
schema:
type: integer
- name: generatorId
description: The generator item ID to modify.
in: path
required: true
schema:
type: integer
- name: Item
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
in: query
style: deepObject
explode: true
schema:
type: object
properties:
Location:
type: object
properties:
uri:
type: string
locationID:
type: integer
Policy:
type: object
properties:
value:
type: integer
scope:
type: string
enum:
- all
- count
unwatched:
$ref: "#/components/schemas/BoolInt"
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
locationID: -1
Policy:
value: ''
scope: all
unwatched: 0
target: ''
targetTagID: 1
title: Jack-Jack Attack
type: 42
responses:
'200':
$ref: '#/components/responses/slash-post-responses-200'
'400':
$ref: '#/components/responses/400'
'404':
description: Playlist not found (or user may not have permission to access playlist) or generator not found
content:
text/html: {}
/playlists/{playlistId}/items/{generatorId}/items:
get:
summary: Get a playlist generator's items
operationId: getPlaylistGeneratorItems
description: Get a playlist generator's items
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: playlistId
description: The ID of the playlist
in: path
required: true
schema:
type: integer
- name: generatorId
description: The generator item ID to delete.
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- properties:
Metadata:
allOf:
- $ref: '#/components/schemas/Metadata'
- properties:
processingState:
description: The state of processing if this generator is part of an optimizer playlist
enum:
- processed
- completed
- tombstoned
- disabled
- error
- pending
type: string
processingStateContext:
description: The error which could have occurred (or `good`)
enum:
- good
- sourceFileUnavailable
- sourceFileMetadataError
- clientProfileError
- ioError
- transcoderError
- unknownError
- mediaAnalysisError
- downloadFailed
- accessDenied
- cannotTranscode
- codecInstallError
type: string
type: object
type: object
type: object
'400':
$ref: '#/components/responses/400'
'404':
description: Playlist not found (or user may not have permission to access playlist) or generator not found
content:
text/html: {}
/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.
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: playlistId
description: The ID of the playlist
in: path
required: true
schema:
type: integer
- name: playlistItemId
description: The playlist item ID to move.
in: path
required: true
schema:
type: integer
- name: after
description: The playlist item ID to insert the new item after. If not provided, item is moved to beginning of playlist
in: query
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/slash-post-responses-200'
'400':
$ref: '#/components/responses/400'
'404':
description: Playlist not found (or user may not have permission to access playlist)
content:
text/html: {}
/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.
tags:
- 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: playQueueId
description: The ID of the play queue.
in: path
required: true
schema:
type: integer
- name: playQueueItemId
description: The play queue item ID to delete.
in: path
required: true
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/slash-post-responses-200'
'400':
$ref: '#/components/responses/400'
'404':
description: Play queue not found
content:
text/html: {}
/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.
tags:
- 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: playQueueId
description: The ID of the play queue.
in: path
required: true
schema:
type: integer
- name: playQueueItemId
description: The play queue item ID to delete.
in: path
required: true
schema:
type: integer
- name: after
description: The play queue item ID to insert the new item after. If not present, moves to the beginning.
in: query
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/slash-post-responses-200'
'400':
$ref: '#/components/responses/400'
'404':
description: Play queue or queue item not found
content:
text/html: {}
/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
tags:
- Library
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: string
- name: element
in: path
required: true
schema:
type: string
enum:
- thumb
- art
- clearLogo
- banner
- poster
- theme
- name: timestamp
description: A timestamp on the element used for cache management in the client
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
audio/mpeg3:
schema:
format: binary
type: string
image/jpeg:
schema:
format: binary
type: string
/library/parts/{partId}/{changestamp}/{filename}:
get:
summary: Get a media part
operationId: getMediaPart
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"
- $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 part id who's index is to be fetched
in: path
required: true
schema:
type: integer
- name: changestamp
description: The changestamp of the part; used for busting potential caches. Provided in the `key` for the part
in: path
required: true
schema:
type: integer
- name: filename
description: A generic filename used for a client media stack which relies on the extension in the request. Provided in the `key` for the part
in: path
required: true
schema:
type: string
- name: download
description: Whether this is a file download
in: query
schema:
$ref: "#/components/schemas/BoolInt"
responses:
'200':
description: OK
headers:
Content-Disposition:
description: 'Note: This header is only included in download requests'
schema:
type: string
'403':
description: Client requested download and server owner has forbidden download of media
content:
text/html: {}
'404':
description: The part doesn't exist
content:
text/html: {}
'503':
description: Client requested the part without a decision and no decision could be made or decision is for a transcode
content:
text/html: {}
'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: {}
/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
tags:
- Library
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 part id who's index is to be fetched
in: path
required: true
schema:
type: integer
- name: index
description: The type of index to grab.
in: path
required: true
schema:
type: string
enum:
- sd
- name: offset
description: The offset to seek in ms.
in: path
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
image/jpeg:
schema:
format: binary
type: string
'404':
description: The part or the index doesn't exist
content:
text/html: {}
/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
tags:
- EPG
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: country
description: 3 letter country code
in: path
required: true
schema:
type: string
- name: epgId
description: The `providerIdentifier` of the provider
in: path
required: true
schema:
type: string
- name: region
description: The region for the lineup
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/MediaContainerWithLineup'
'404':
description: No provider with the identifier was found
content:
text/html: {}
/livetv/sessions/{sessionId}/{consumerId}/{segmentId}:
get:
summary: Get a single session segment
operationId: getSessionSegment
description: Get a single LiveTV session segment
tags:
- Live 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: sessionId
description: The session id
in: path
required: true
schema:
type: string
- name: consumerId
description: The consumer id
in: path
required: true
schema:
type: string
- name: segmentId
description: The segment id
in: path
required: true
schema:
type: string
responses:
'200':
description: MPEG-TS segment for playing HLS content
'404':
description: Session, consumer, or segment not found
/playlists/{playlistId}/items/{generatorId}/{metadataId}/{action}:
put:
summary: Reprocess a generator
operationId: refreshPlaylist
description: Make a generator reprocess (refresh)
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: playlistId
description: The ID of the playlist
in: path
required: true
schema:
type: integer
- name: generatorId
description: The generator item ID to act on
in: path
required: true
schema:
type: integer
- name: metadataId
description: The metadata item ID to act on
in: path
required: true
schema:
type: integer
- name: action
description: The action to perform for this item on this optimizer queue
in: path
required: true
schema:
type: string
enum:
- reprocess
- disable
- enable
responses:
'200':
$ref: '#/components/responses/200'
'400':
$ref: '#/components/responses/400'
'404':
description: Playlist not found (or user may not have permission to access playlist) or generator or metadata item not found
content:
text/html: {}
components:
securitySchemes:
token:
name: X-Plex-Token
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
JWT tokens provide better security with:
- Short-lived tokens (7 days expiration)
- Public-key cryptography (ED25519)
- Better clock synchronization
- Individual device revocation capability
type: apiKey
in: header
parameters:
accepts:
name: accepts
description: Indicates the client accepts the indicated media types
in: header
schema:
type: string
default: application/xml
enum:
- application/json
- 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
in: query
schema:
type: string
enum:
- burn
- text
- unknown
example: burn
audioBoost:
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
audioChannelCount:
name: audioChannelCount
description: Target video number of audio channels.
in: query
schema:
type: integer
minimum: 1
maximum: 8
example: 5
autoAdjustQuality:
name: autoAdjustQuality
description: Indicates the client supports ABR.
in: query
schema:
$ref: "#/components/schemas/BoolInt"
example: 1
autoAdjustSubtitle:
name: autoAdjustSubtitle
description: Indicates if the server should adjust subtitles based on Voice Activity Data.
in: query
schema:
$ref: "#/components/schemas/BoolInt"
example: 1
composite:
name: composite
in: query
schema:
type: object
properties:
type:
description: Limit composite to specified metadata types
type: integer
format:
description: The image type
type: string
enum:
- jpg
- png
backgroundColor:
description: 6 character hex RGB value for background color for image
type: string
border:
description: The width of the intra-image border
type: integer
cols:
description: Number of columns to construct in the composite image
type: integer
crop:
description: Where to crop source images to fit into composite image proportions
type: string
enum:
- center
- top
height:
description: The height of the image
type: integer
media:
description: The default image type to use as the sources
type: string
enum:
- thumb
- art
- banner
repeat:
description: Allow repetion of images if there are not enough source images to fill grid
type: boolean
rows:
description: Number of rows to construct in the composite image
type: integer
width:
description: The width of the image
type: integer
count:
name: count
description: Limit results to count items
in: query
schema:
type: integer
directPlay:
name: directPlay
description: Indicates the client supports direct playing the indicated content.
in: query
schema:
$ref: "#/components/schemas/BoolInt"
example: 1
directStream:
name: directStream
description: Indicates the client supports direct streaming the video of the indicated content.
in: query
schema:
$ref: "#/components/schemas/BoolInt"
example: 1
directStreamAudio:
name: directStreamAudio
description: Indicates the client supports direct streaming the audio of the indicated content.
in: query
schema:
$ref: "#/components/schemas/BoolInt"
example: 1
disableResolutionRotation:
name: disableResolutionRotation
description: Indicates if resolution should be adjusted for orientation.
in: query
schema:
$ref: "#/components/schemas/BoolInt"
example: 1
hasMDE:
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
location:
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
mediaBufferSize:
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
mediaIndex:
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
mediaQuery:
name: mediaQuery
description: This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries
in: query
schema:
type: object
musicBitrate:
name: musicBitrate
description: Target bitrate for audio only files (in kbps, used to transcode).
in: query
schema:
type: integer
minimum: 0
example: 5000
offset:
name: offset
description: Offset from the start of the media (in seconds).
in: query
schema:
type: number
example: 90.5
partIndex:
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
path:
name: path
description: Internal PMS path of the media to transcode.
in: query
schema:
type: string
example: /library/metadata/151671
peakBitrate:
name: peakBitrate
description: Maximum bitrate (in kbps) to use in ABR.
in: query
schema:
type: integer
minimum: 0
example: 12000
photoResolution:
name: photoResolution
description: Target photo resolution.
in: query
schema:
type: string
pattern: ^\d[x:]\d$
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)
in: query
schema:
type: string
enum:
- http
- hls
- dash
example: dash
secondsPerSegment:
name: secondsPerSegment
description: Number of seconds to include in each transcoded segment
in: query
schema:
type: integer
example: 5
smart:
name: smart
description: Whether this is a smart collection/playlist
in: query
schema:
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
in: query
schema:
type: string
enum:
- auto
- burn
- none
- sidecar
- embedded
- segmented
- unknown
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)
in: query
schema:
type: integer
minimum: 1
example: 50
title:
name: title
description: The title to filter by or assign
in: query
schema:
type: string
transcodeSessionId:
name: transcodeSessionId
description: Transcode session UUID
in: query
schema:
type: string
transcodeType:
name: transcodeType
description: Type of transcode media
in: path
required: true
schema:
type: string
enum:
- video
- music
- audio
- subtitles
type:
name: type
description: The metadata type to filter by
in: query
schema:
type: integer
videoBitrate:
name: videoBitrate
description: Target video bitrate (in kbps).
in: query
schema:
type: integer
minimum: 0
example: 12000
videoQuality:
name: videoQuality
description: Target photo quality.
in: query
schema:
type: integer
minimum: 0
maximum: 99
example: 50
videoResolution:
name: videoResolution
description: Target maximum video resolution.
in: query
schema:
type: string
pattern: ^\d[x:]\d$
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
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
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
schema:
type: string
example: abc123
example: abc123
X-Plex-Product:
name: X-Plex-Product
x-speakeasy-name-override: Product
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
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
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
in: header
description: A relatively friendly name for the client device
schema:
type: string
example: Roku 3
example: Roku 3
X-Plex-Model:
name: X-Plex-Model
x-speakeasy-name-override: Model
in: header
description: A potentially less friendly identifier for the device model
schema:
type: string
example: 4200X
example: 4200X
X-Plex-Device-Vendor:
name: X-Plex-Device-Vendor
x-speakeasy-name-override: Device-Vendor
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
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
in: header
description: The marketplace on which the client application is distributed
schema:
type: string
example: googlePlay
example: googlePlay
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 the collection
schema:
type: integer
minimum: 0
example: 100
responses:
'200':
description: OK
content:
text/html: {}
'204':
description: No Content
content:
text/html: {}
'400':
description: Bad Request
content:
text/html: {}
'403':
description: Forbidden
content:
text/html: {}
'404':
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'
X-Plex-Container-Total-Size:
$ref: '#/components/headers/X-Plex-Container-Total-Size'
content:
application/json:
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
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'
- 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'
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
type: array
type: object
type: object
post-responses-200:
description: OK
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
requestHandler_slash-get-responses-200:
description: OK
content:
application/json:
schema:
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/ServerConfiguration'
- properties:
Directory:
items:
properties:
count:
type: integer
key:
description: The key where this directory is found
type: string
title:
type: string
type: object
type: array
type: object
type: object
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:
$ref: '#/components/schemas/MediaContainerWithHubs'
responses-400:
description: Request parameters are bad, such as an `endTimeOffset` prior to the `startTimeOffset`
content:
text/html: {}
responses-403:
description: The media is not accessible to the user
content:
text/html: {}
responses-404:
description: The stream doesn't exist, or the loudness feature is not available on this PMS
content:
text/html: {}
slash-get-responses-200:
description: OK
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:
type: boolean
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
slash-post-responses-200:
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MediaContainerWithPlaylistMetadata'
schemas:
AllowSync:
type: boolean
Art:
type: string
BoolInt:
type: integer
enum:
- 0
- 1
Channel:
type: object
properties:
title:
type: string
callSign:
type: string
channelVcn:
type: string
hd:
type: boolean
identifier:
type: string
key:
type: string
language:
type: string
thumb:
type: string
ChannelMapping:
type: object
properties:
channelKey:
type: string
deviceIdentifier:
type: string
enabled:
type: string
lineupIdentifier:
type: string
Content:
type: boolean
Device:
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
Directory:
type: object
additionalProperties: true
properties:
title:
type: string
type:
type: string
art:
type: string
content:
type: boolean
filter:
type: string
hasPrefs:
type: boolean
hasStoreServices:
type: boolean
hubKey:
type: string
identifier:
type: string
key:
type: string
lastAccessedAt:
type: integer
Pivot:
type: array
items:
type: object
properties:
title:
type: string
type:
type: string
context:
type: string
id:
type: string
key:
type: string
symbol:
type: string
share:
type: integer
thumb:
type: string
titleBar:
type: string
Filter:
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.
type: object
properties:
title:
description: The title for the filter.
type: string
filter:
description: This represents the filter name used for the filter, which can be used to construct complex media queries with.
type: string
filterType:
description: This is either `string`, `integer`, or `boolean`, and describes the type of values used for the filter.
type: string
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
Hub:
type: object
additionalProperties: true
properties:
title:
description: A title for this grouping of content
type: string
type:
description: The type of the items contained in this hub, or possibly `mixed` if there are multiple types
type: string
example: track
context:
type: string
example: hub.home.onDeck
hubIdentifier:
description: A unique identifier for the hub
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.
type: string
key:
description: The key at which all of the content for this hub can be retrieved
type: string
example: /hubs/sections/home/onDeck
Metadata:
type: array
items:
$ref: '#/components/schemas/Metadata'
more:
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
type: boolean
random:
description: Indicating that the contents of the hub may change on each request
type: boolean
size:
type: integer
example: 1
style:
description: A suggestion on how this hub's contents might be displayed by a client. Some examples include `hero`, `list`, `spotlight`, and `upsell`
type: string
subtype:
description: The subtype of the items contained in this hub, or possibly `mixed` if there are multiple types
type: string
example: podcast
totalSize:
type: integer
example: 8
Image:
description: |
Images such as movie posters and background artwork are represented by Image elements.
type: object
properties:
type:
description: Describes both the purpose and intended presentation of the image.
type: string
enum:
- background
- banner
- clearLogo
- coverPoster
- snapshot
alt:
description: Title to use for accessibility.
type: string
url:
description: The relative path or absolute url for the image.
type: string
Items:
type: object
allOf:
- $ref: '#/components/schemas/Metadata'
- type: object
properties:
MetadataItem:
type: array
items:
$ref: '#/components/schemas/Items'
description: Nested metadata items
type: object
Key:
type: string
LibrarySection:
type: object
properties:
title:
$ref: '#/components/schemas/Title'
type:
$ref: '#/components/schemas/Type'
agent:
type: string
allowSync:
type: boolean
art:
$ref: '#/components/schemas/Art'
composite:
type: string
content:
$ref: '#/components/schemas/Content'
contentChangedAt:
type: integer
createdAt:
type: integer
directory:
type: boolean
filters:
description: Indicates whether this section has filtering capabilities
type: boolean
hidden:
type: boolean
key:
$ref: '#/components/schemas/Key'
language:
type: string
Location:
type: array
items:
description: Represents a top-level location on disk where media in this library section is stored
type: object
properties:
id:
type: integer
path:
description: The path of where this directory exists on disk
refreshing:
description: Indicates whether this library section is currently scanning
type: boolean
scannedAt:
type: integer
scanner:
type: string
thumb:
$ref: '#/components/schemas/Thumb'
updatedAt:
type: integer
Lineup:
type: object
properties:
title:
type: string
type:
description: The type of this object (`lineup` in this case)
type: string
lineupType:
description: |
- `-1`: N/A
- `0`: Over the air
- `1`: Cable
- `2`: Satellite
- `3`: IPTV
- `4`: Virtual
type: integer
enum:
- -1
- 0
- 1
- 2
- 3
- 4
location:
type: string
uuid:
description: The uuid of this lineup
type: string
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.
type: object
additionalProperties: true
properties:
aspectRatio:
type: number
example: 2.35
audioChannels:
type: integer
example: 2
audioCodec:
example: aac
audioProfile:
example: lc
bitrate:
type: integer
example: 5612
container:
example: mov
duration:
type: integer
example: 150192
has64bitOffsets:
type: boolean
example: false
hasVoiceActivity:
type: boolean
example: true
height:
type: integer
example: 544
id:
type: integer
example: 1
optimizedForStreaming:
type: boolean
example: false
Part:
type: array
items:
$ref: '#/components/schemas/Part'
videoCodec:
example: h264
videoFrameRate:
example: 24p
videoProfile:
example: main
videoResolution:
example: '720'
width:
type: integer
example: 1280
MediaContainer:
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
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.
type: integer
size:
type: integer
totalSize:
description: |
The total size of objects available. Also provided in the `X-Plex-Container-Total-Size` header.
type: integer
MediaContainerWithArtwork:
type: object
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- type: object
properties:
Metadata:
type: array
items:
type: object
additionalProperties: true
properties:
title:
description: The title of the item
type: string
type:
type: string
enum:
- image
key:
description: The path to the artwork
type: string
MediaContainerWithDecision:
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
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- type: object
properties:
availableBandwidth:
description: The maximum available bitrate when the decision was rendered.
type: integer
directPlayDecisionCode:
type: integer
directPlayDecisionText:
type: string
generalDecisionCode:
description: The overall decision. 1xxx are playback can succeed, 2xxx are a general error (such as insufficient bandwidth), 3xxx are errors in direct play, and 4xxx are errors in transcodes. Same codes are used in all.
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
Metadata:
type: array
items:
allOf:
- $ref: '#/components/schemas/Metadata'
- type: object
properties:
Media:
type: array
items:
allOf:
- $ref: '#/components/schemas/Media'
- type: object
properties:
abr:
type: boolean
Part:
type: array
items:
allOf:
- $ref: '#/components/schemas/Part'
- type: object
properties:
decision:
type: string
enum:
- directplay
- transcode
- none
selected:
type: boolean
Stream:
type: array
items:
allOf:
- $ref: '#/components/schemas/Stream'
- type: object
properties:
decision:
type: string
enum:
- copy
- transcode
- burn
- unavailable
- ignore
- none
location:
type: string
enum:
- direct
- sidecar-subs
- segments-video
- segments-audio
- segments-av
- segments-subs
- embedded
- sidecar
resourceSession:
type: string
selected:
type: boolean
transcodeDecisionCode:
type: integer
transcodeDecisionText:
type: string
MediaContainerWithDevice:
type: object
properties:
MediaContainer:
allOf:
- $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
MediaContainerWithDirectory:
type: object
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- type: object
properties:
Directory:
type: array
items:
$ref: '#/components/schemas/Directory'
MediaContainerWithHubs:
type: object
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- type: object
properties:
Hub:
type: array
items:
$ref: '#/components/schemas/Hub'
MediaContainerWithLineup:
type: object
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- type: object
properties:
Lineup:
type: array
items:
$ref: '#/components/schemas/Lineup'
uuid:
description: The UUID of this set lineups
type: string
MediaContainerWithMetadata:
type: object
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- type: object
properties:
Metadata:
type: array
items:
$ref: '#/components/schemas/Metadata'
MediaContainerWithNestedMetadata:
type: object
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- type: object
properties:
MetadataItem:
type: array
items:
type: object
allOf:
- $ref: '#/components/schemas/Metadata'
- type: object
properties:
MetadataItem:
type: array
items:
$ref: '#/components/schemas/Items'
description: Nested metadata items
type: object
MediaContainerWithPlaylistMetadata:
type: object
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- type: object
properties:
Metadata:
type: array
items:
allOf:
- type: object
properties:
readOnly:
description: If we return this as true then this playlist cannot be altered or deleted directly by the client.
type: boolean
composite:
description: A composite image for the playlist.
type: string
duration:
description: The total duration of the playlist in ms
type: integer
key:
description: Leads to a list of items in the playlist.
type: string
leafCount:
description: The number of items in the playlist.
type: integer
playlistType:
description: The type of the playlist.
type: string
enum:
- audio
- video
- photo
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'
MediaContainerWithSettings:
type: object
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- type: object
properties:
Setting:
type: array
items:
$ref: '#/components/schemas/Setting'
MediaContainerWithStatus:
type: object
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- type: object
properties:
status:
description: A status indicator. If present and non-zero, indicates an error
type: integer
MediaContainerWithSubscription:
type: object
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- type: object
properties:
MediaSubscription:
type: array
items:
$ref: '#/components/schemas/MediaSubscription'
MediaGrabOperation:
description: |
A media grab opration represents a scheduled or active recording of media
type: object
properties:
currentSize:
type: integer
grabberIdentifier:
type: string
grabberProtocol:
type: string
id:
type: string
key:
type: string
mediaIndex:
type: integer
mediaSubscriptionID:
type: integer
Metadata:
$ref: '#/components/schemas/Metadata'
percent:
type: number
provider:
type: string
status:
type: string
enum:
- inactive
- scheduled
- inprogress
- complete
- cancelled
- error
- postprocessing
- paused
MediaSubscription:
description: |
A media subscription contains a representation of metadata desired to be recorded
type: object
properties:
title:
type: string
type:
description: The metadata type of the root item of the subscription
type: integer
airingsType:
type: string
enum:
- New Airings Only
- New and Repeat Airings
createdAt:
type: integer
Directory:
description: Media Matching Hints
additionalProperties: true
durationTotal:
description: Only included if `includeStorage` is specified
type: integer
key:
type: string
librarySectionTitle:
type: string
locationPath:
type: string
MediaGrabOperation:
type: array
items:
$ref: '#/components/schemas/MediaGrabOperation'
Playlist:
description: Media Matching Hints
additionalProperties: true
Setting:
type: array
items:
$ref: '#/components/schemas/Setting'
storageTotal:
description: Only included if `includeStorage` is specified
type: integer
targetLibrarySectionID:
description: The library section id for where the item is to be recorded
type: integer
targetSectionLocationID:
description: The library section location id for where the item is to be recorded
type: integer
Video:
description: Media Matching Hints
additionalProperties: true
Metadata:
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
additionalProperties: true
properties:
title:
description: The title of the item (e.g. “300” or “The Simpsons”)
type:
description: The type of the video item, such as `movie`, `episode`, or `clip`.
absoluteIndex:
description: When present, contains the disc number for a track on multi-disc albums.
type: integer
addedAt:
description: In units of seconds since the epoch, returns the time at which the item was added to the library.
type: integer
art:
description: When present, the URL for the background artwork for the item.
audienceRating:
description: Some rating systems separate reviewer ratings from audience ratings
type: number
minimum: 0
maximum: 10
audienceRatingImage:
description: A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled).
Autotag:
type: array
items:
$ref: '#/components/schemas/Tag'
banner:
description: When present, the URL for a banner graphic for the item.
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).
composite:
description: When present, the URL for a composite image for descendent items (e.g. photo albums or playlists).
contentRating:
description: If known, the content rating (e.g. MPAA) for an item.
Country:
type: array
items:
$ref: '#/components/schemas/Tag'
Director:
type: array
items:
$ref: '#/components/schemas/Tag'
duration:
description: When present, the duration for the item, in units of milliseconds.
type: integer
Filter:
description: Typically only seen in metadata at a library's top level
type: array
items:
$ref: '#/components/schemas/Filter'
Genre:
type: array
items:
$ref: '#/components/schemas/Tag'
grandparentArt:
description: The `art` of the grandparent
type: string
grandparentHero:
description: The `hero` of the grandparent
type: string
grandparentKey:
description: The `key` of the grandparent
type: string
grandparentRatingKey:
description: The `ratingKey` of the grandparent
type: string
grandparentTheme:
description: The `theme` of the grandparent
type: string
grandparentThumb:
description: The `thumb` of the grandparent
type: string
grandparentTitle:
description: The `title` of the grandparent
type: string
Guid:
type: array
items:
$ref: '#/components/schemas/Tag'
hero:
description: When present, the URL for a hero image for the item.
Image:
type: array
items:
$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
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.
lastViewedAt:
description: When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time.
type: integer
leafCount:
description: For shows and seasons, contains the number of total episodes.
type: integer
Media:
type: array
items:
$ref: '#/components/schemas/Media'
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.
originalTitle:
description: When present, used to indicate an item's original title, e.g. a movie's foreign title.
parentHero:
description: The `hero` of the parent
type: string
parentIndex:
description: The `index` of the parent
type: integer
parentKey:
description: The `key` of the parent
type: string
parentRatingKey:
description: The `ratingKey` of the parent
type: string
parentThumb:
description: The `thumb` of the parent
type: string
parentTitle:
description: The `title` of the parent
type: string
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.
prompt:
description: Prompt to give the user for this directory (such as `Search Movies`)
type: string
rating:
description: When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from.
type: number
minimum: 0
maximum: 10
Rating:
type: array
items:
$ref: '#/components/schemas/Tag'
x-speakeasy-name-override: RatingArray
ratingCount:
description: Number of ratings under this metadata
type: integer
ratingImage:
description: When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten.
ratingKey:
description: This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed.
Role:
type: array
items:
$ref: '#/components/schemas/Tag'
search:
description: Indicates this is a search directory
type: boolean
secondary:
description: Used by old clients to provide nested menus allowing for primative (but structured) navigation.
type: boolean
skipChildren:
description: When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc.
type: boolean
skipParent:
description: When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show).
type: boolean
Sort:
description: Typically only seen in metadata at a library's top level
type: array
items:
$ref: '#/components/schemas/Sort'
studio:
description: When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums).
subtype:
description: The subtype of the video item, such as `photo` when the video item is in a photo library
summary:
description: When present, the extended textual information about the item (e.g. movie plot, artist biography, album review).
tagline:
description: When present, a pithy one-liner about the item (usually only seen for movies).
theme:
description: When present, the URL for theme music for the item (usually only for TV shows).
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.
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”).
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
userRating:
description: When the user has rated an item, this contains the user rating
type: number
minimum: 0
maximum: 10
viewCount:
description: When a users has completed watched or listened to an item, this attribute contains the number of consumptions.
type: integer
viewedLeafCount:
description: For shows and seasons, contains the number of viewed episodes.
type: integer
viewOffset:
description: When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds.
type: integer
Writer:
type: array
items:
$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
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
additionalProperties: true
properties:
audioProfile:
example: lc
container:
description: The container of the media file, such as `mp4` or `mkv`
example: mov
duration:
description: The duration of the media item, in milliseconds
type: integer
example: 150192
file:
description: The local file path at which the part is stored on the server
example: /home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov
has64bitOffsets:
type: boolean
example: false
id:
type: integer
example: 1
key:
description: The key from which the media can be streamed
example: /library/parts/1/1531779263/file.mov
optimizedForStreaming:
type: boolean
example: false
size:
description: The size of the media, in bytes
type: integer
example: 105355654
Stream:
type: array
items:
$ref: '#/components/schemas/Stream'
videoProfile:
example: main
Player:
description: Information about the player being used for playback
type: object
properties:
title:
description: The title of the client
type: string
address:
description: The remote address
type: string
local:
description: Indicating if the client is playing from the local LAN
type: boolean
machineIdentifier:
description: The identifier of the client
type: string
model:
description: The model of the client
type: string
platform:
description: The platform of the client
type: string
platformVersion:
description: The platformVersion of the client
type: string
product:
description: The product name of the client
type: string
relayed:
description: Indicating if the client is playing over a relay connection
type: boolean
remotePublicAddress:
description: The client's public address
type: string
secure:
description: Indicating if the client is playing over HTTPS
type: boolean
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
type: string
version:
description: The version of the client
type: string
ServerConfiguration:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- type: object
properties:
allowCameraUpload:
type: boolean
allowChannelAccess:
type: boolean
allowMediaDeletion:
type: boolean
allowSharing:
type: boolean
allowSync:
type: boolean
allowTuners:
type: boolean
backgroundProcessing:
type: boolean
certificate:
type: boolean
companionProxy:
type: boolean
countryCode:
type: string
diagnostics:
type: string
eventStream:
type: boolean
friendlyName:
type: string
hubSearch:
type: boolean
itemClusters:
type: boolean
livetv:
type: integer
example: 7
machineIdentifier:
example: 0123456789abcdef0123456789abcdef012345678
mediaProviders:
type: boolean
multiuser:
type: boolean
musicAnalysis:
type: integer
example: 2
myPlex:
type: boolean
myPlexMappingState:
example: mapped
myPlexSigninState:
example: ok
myPlexSubscription:
type: boolean
myPlexUsername:
type: string
offlineTranscode:
example: 1
ownerFeatures:
description: A comma-separated list of features which are enabled for the server owner
type: string
platform:
type: string
platformVersion:
type: string
pluginHost:
type: boolean
pushNotifications:
type: boolean
readOnlyLibraries:
type: boolean
streamingBrainABRVersion:
type: integer
streamingBrainVersion:
type: integer
sync:
type: boolean
transcoderActiveVideoSessions:
type: integer
transcoderAudio:
type: boolean
transcoderLyrics:
type: boolean
transcoderPhoto:
type: boolean
transcoderSubtitles:
type: boolean
transcoderVideo:
type: boolean
transcoderVideoBitrates:
description: The suggested video quality bitrates to present to the user
transcoderVideoQualities:
type: string
transcoderVideoResolutions:
description: The suggested video resolutions to the above quality bitrates
updatedAt:
type: integer
updater:
type: boolean
version:
type: string
voiceSearch:
type: boolean
Session:
description: Information about the playback session
type: object
properties:
bandwidth:
description: The bandwidth used by this client's playback in kbps
type: integer
id:
description: The id of the playback session
type: string
location:
description: The location of the client
type: string
enum:
- lan
- wan
Setting:
description: A configuration setting or preference
type: object
properties:
type:
description: The type of the value of this setting
type: string
enum:
- bool
- int
- text
- double
default:
description: The default value of this setting
oneOf:
- type: string
- type: number
- type: boolean
advanced:
description: Whether the setting is considered advanced and normally hidden from the user
type: boolean
enumValues:
description: The possible values for this setting if restricted. The list is `|` separated with `value:name` entries.
type: string
group:
description: The group name of this setting to aid in display of a hierarchy
type: string
hidden:
description: Whether the setting is hidden or not
type: boolean
id:
description: The query parameter name for this setting
type: string
label:
description: A user-friendly name for the setting
type: string
summary:
description: A description of the setting
type: string
value:
description: The current value of this setting
oneOf:
- type: string
- type: number
- type: boolean
Sort:
allOf:
- $ref: '#/components/schemas/Directory'
- description: |
Each `Sort` object contains a description of the sort field.
type: object
properties:
title:
description: The title of the field.
type: string
default:
description: If present, this sort is the default and in this direction
type: string
enum:
- asc
- desc
defaultDirection:
description: This default diction of this sort
type: string
enum:
- asc
- desc
descKey:
description: The key for sorting this field in reverse order
type: string
firstCharacterKey:
description: The key to use to get items sorted by this field and indexed by the first character
type: string
key:
description: The key to use in the sort field to make items sort by this item
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).
type: object
additionalProperties: true
properties:
default:
type: boolean
example: true
audioChannelLayout:
example: stereo
bitDepth:
type: integer
example: 8
bitrate:
type: integer
example: 5466
canAutoSync:
description: For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video.
type: boolean
example: true
chromaLocation:
example: topleft
chromaSubsampling:
example: '4:2:0'
codec:
description: The codec of the stream, such as `h264` or `aac`
example: h264
colorPrimaries:
example: bt709
colorRange:
example: tv
colorSpace:
example: bt709
colorTrc:
example: bt709
displayTitle:
description: A friendly name for the stream, often comprised of the language and codec information
example: English (H.264 Main)
frameRate:
type: number
example: 23.976
hasScalingMatrix:
example: false
height:
type: integer
example: 544
id:
type: integer
example: 1
index:
description: If the stream is part of the `Part` and not an external resource, the index of the stream within that part
type: integer
example: 0
key:
description: If the stream is independently streamable, the key from which it can be streamed
example: /library/streams/1
language:
example: English
languageCode:
description: The three character language code for the stream contents
example: eng
level:
type: integer
example: 31
profile:
example: main
refFrames:
type: integer
example: 2
samplingRate:
type: integer
example: 48000
selected:
type: boolean
streamIdentifier:
type: integer
example: 1
streamType:
description: A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics
type: integer
example: 1
width:
type: integer
example: 1280
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.
type: object
properties:
confidence:
description: Measure of the confidence of an automatic tag
type: number
context:
type: string
filter:
description: A filter parameter that can be used to query for more content that matches this tag value.
example: actor=49
id:
type: integer
ratingKey:
type: string
role:
description: The role this actor played
example: Secretary
tag:
description: The value of the tag (the name)
example: Shaun Lawton
tagKey:
description: Plex identifier for this tag which can be used to fetch additional information from plex.tv
example: 5d3ee12c4cde6a001c3e0b27
tagType:
type: integer
thumb:
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
properties:
complete:
type: boolean
context:
type: string
duration:
type: integer
error:
type: boolean
key:
type: string
progress:
type: number
minimum: 0
maximum: 100
protocol:
type: string
size:
type: integer
sourceAudioCodec:
type: string
sourceVideoCodec:
type: string
speed:
type: number
throttled:
type: boolean
transcodeHwFullPipeline:
type: boolean
transcodeHwRequested:
type: boolean
Type:
type: string
User:
description: The user playing the content
type: object
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