Skip to main content
POST
/
playlists
PlexPHP
declare(strict_types=1);

require 'vendor/autoload.php';

use LukeHagar\Plex_API;
use LukeHagar\Plex_API\Models\Operations;

$sdk = Plex_API\PlexAPI::builder()
    ->setSecurity(
        '<YOUR_API_KEY_HERE>'
    )
    ->build();

$request = new Operations\CreatePlaylistRequest(
    title: '<value>',
    type: Operations\CreatePlaylistQueryParamType::Audio,
    smart: Operations\Smart::One,
    uri: 'https://short-term-disconnection.name/',
);

$response = $sdk->playlists->createPlaylist(
    request: $request
);

if ($response->object !== null) {
    // handle response
}
{
  "MediaContainer": {
    "identifier": "<string>",
    "offset": 123,
    "size": 123,
    "totalSize": 123,
    "Metadata": [
      {
        "key": "<string>",
        "title": "<string>",
        "type": "<string>",
        "addedAt": 123,
        "readOnly": true,
        "composite": "<string>",
        "duration": 123,
        "leafCount": 123,
        "playlistType": "audio",
        "smart": true,
        "specialPlaylistType": "<string>",
        "absoluteIndex": 123,
        "art": "/library/metadata/58683/art/1703239236",
        "audienceRating": 5,
        "audienceRatingImage": "<string>",
        "Autotag": [
          {
            "tag": "Shaun Lawton",
            "confidence": 123,
            "context": "<string>",
            "filter": "actor=49",
            "id": 123,
            "ratingKey": "58683",
            "role": "Secretary",
            "tagKey": "5d3ee12c4cde6a001c3e0b27",
            "tagType": 123,
            "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"
          }
        ],
        "banner": "<string>",
        "chapterSource": "media",
        "childCount": 1,
        "contentRating": "<string>",
        "Country": [
          {
            "tag": "Shaun Lawton",
            "confidence": 123,
            "context": "<string>",
            "filter": "actor=49",
            "id": 123,
            "ratingKey": "58683",
            "role": "Secretary",
            "tagKey": "5d3ee12c4cde6a001c3e0b27",
            "tagType": 123,
            "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"
          }
        ],
        "Director": [
          {
            "tag": "Shaun Lawton",
            "confidence": 123,
            "context": "<string>",
            "filter": "actor=49",
            "id": 123,
            "ratingKey": "58683",
            "role": "Secretary",
            "tagKey": "5d3ee12c4cde6a001c3e0b27",
            "tagType": 123,
            "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"
          }
        ],
        "Filter": [
          {
            "title": "<string>",
            "type": "<string>",
            "art": "<string>",
            "content": true,
            "filter": "<string>",
            "hasPrefs": true,
            "hasStoreServices": true,
            "hubKey": "<string>",
            "identifier": "<string>",
            "key": "<string>",
            "lastAccessedAt": 123,
            "Pivot": [
              {
                "title": "<string>",
                "type": "<string>",
                "context": "<string>",
                "id": "<string>",
                "key": "<string>",
                "symbol": "<string>"
              }
            ],
            "share": 123,
            "thumb": "<string>",
            "titleBar": "<string>",
            "filterType": "<string>"
          }
        ],
        "Genre": [
          {
            "tag": "Shaun Lawton",
            "confidence": 123,
            "context": "<string>",
            "filter": "actor=49",
            "id": 123,
            "ratingKey": "58683",
            "role": "Secretary",
            "tagKey": "5d3ee12c4cde6a001c3e0b27",
            "tagType": 123,
            "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"
          }
        ],
        "grandparentArt": "<string>",
        "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4",
        "grandparentHero": "<string>",
        "grandparentKey": "<string>",
        "grandparentRatingKey": "<string>",
        "grandparentTheme": "<string>",
        "grandparentThumb": "<string>",
        "grandparentTitle": "<string>",
        "guid": "plex://movie/5d7768ba96b655001fdc0408",
        "Guid": [
          {
            "id": {
              "imdbExample": {
                "summary": "IMDB example",
                "value": "imdb://tt13015952"
              },
              "tmdbExample": {
                "summary": "TMDB example",
                "value": "tmdb://2434012"
              },
              "tvdbExample": {
                "summary": "TVDB example",
                "value": "tvdb://7945991"
              }
            }
          }
        ],
        "hero": "<string>",
        "Image": [
          {
            "type": "background",
            "alt": "<string>",
            "url": "<string>"
          }
        ],
        "index": 123,
        "lastViewedAt": 1556281940,
        "Media": [
          {
            "id": 1,
            "aspectRatio": 2.35,
            "audioChannels": 2,
            "audioCodec": "aac",
            "audioProfile": "lc",
            "bitrate": 5612,
            "container": "mov",
            "duration": 150192,
            "has64bitOffsets": false,
            "hasVoiceActivity": true,
            "height": 544,
            "optimizedForStreaming": false,
            "Part": [
              {
                "id": 1,
                "key": "/library/parts/1/1531779263/file.mov",
                "accessible": true,
                "audioProfile": "lc",
                "container": "mov",
                "duration": 150192,
                "exists": true,
                "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov",
                "has64bitOffsets": false,
                "indexes": "sd",
                "optimizedForStreaming": false,
                "size": 105355654,
                "Stream": [
                  {
                    "codec": "hevc",
                    "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)",
                    "id": 1002625,
                    "key": "/library/streams/216389",
                    "streamType": 1,
                    "default": true,
                    "audioChannelLayout": "5.1(side)",
                    "channels": 6,
                    "bitDepth": 10,
                    "DOVIBLCompatID": 1,
                    "DOVIBLPresent": true,
                    "DOVIELPresent": false,
                    "DOVILevel": 6,
                    "DOVIPresent": true,
                    "DOVIProfile": 8,
                    "DOVIRPUPresent": true,
                    "DOVIVersion": "1.0",
                    "bitrate": 24743,
                    "canAutoSync": false,
                    "chromaLocation": "topleft",
                    "chromaSubsampling": "4:2:0",
                    "codedHeight": 1608,
                    "codedWidth": 3840,
                    "closedCaptions": true,
                    "colorPrimaries": "bt2020",
                    "colorRange": "tv",
                    "colorSpace": "bt2020nc",
                    "colorTrc": "smpte2084",
                    "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)",
                    "frameRate": 23.976,
                    "hasScalingMatrix": false,
                    "height": 1602,
                    "index": 0,
                    "language": "English",
                    "languageCode": "eng",
                    "languageTag": "en",
                    "format": "srt",
                    "headerCompression": true,
                    "level": 150,
                    "original": true,
                    "profile": "main 10",
                    "refFrames": 1,
                    "samplingRate": 48000,
                    "scanType": "progressive",
                    "embeddedInVideo": "progressive",
                    "selected": true,
                    "forced": true,
                    "hearingImpaired": true,
                    "dub": true,
                    "title": "SDH",
                    "streamIdentifier": 1,
                    "width": 3840
                  }
                ],
                "videoProfile": "main"
              }
            ],
            "videoCodec": "h264",
            "videoFrameRate": "24p",
            "videoProfile": "main",
            "videoResolution": "720",
            "width": 1280
          }
        ],
        "originallyAvailableAt": "2022-12-14",
        "originalTitle": "<string>",
        "parentGuid": "plex://show/5d9c081b170e24001f2a7be4",
        "parentHero": "<string>",
        "parentIndex": 123,
        "parentKey": "<string>",
        "parentRatingKey": "<string>",
        "parentThumb": "<string>",
        "parentTitle": "<string>",
        "primaryExtraKey": "<string>",
        "prompt": "<string>",
        "rating": 5,
        "Rating": [
          {
            "tag": "Shaun Lawton",
            "confidence": 123,
            "context": "<string>",
            "filter": "actor=49",
            "id": 123,
            "ratingKey": "58683",
            "role": "Secretary",
            "tagKey": "5d3ee12c4cde6a001c3e0b27",
            "tagType": 123,
            "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"
          }
        ],
        "ratingCount": 123,
        "ratingImage": "<string>",
        "ratingKey": "<string>",
        "Role": [
          {
            "tag": "Shaun Lawton",
            "confidence": 123,
            "context": "<string>",
            "filter": "actor=49",
            "id": 123,
            "ratingKey": "58683",
            "role": "Secretary",
            "tagKey": "5d3ee12c4cde6a001c3e0b27",
            "tagType": 123,
            "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"
          }
        ],
        "search": true,
        "secondary": true,
        "skipChildren": true,
        "skipParent": true,
        "Sort": [
          {
            "title": "<string>",
            "type": "<string>",
            "art": "<string>",
            "content": true,
            "filter": "<string>",
            "hasPrefs": true,
            "hasStoreServices": true,
            "hubKey": "<string>",
            "identifier": "<string>",
            "key": "<string>",
            "lastAccessedAt": 123,
            "Pivot": [
              {
                "title": "<string>",
                "type": "<string>",
                "context": "<string>",
                "id": "<string>",
                "key": "<string>",
                "symbol": "<string>"
              }
            ],
            "share": 123,
            "thumb": "<string>",
            "titleBar": "<string>",
            "default": "asc",
            "defaultDirection": "asc",
            "descKey": "<string>",
            "firstCharacterKey": "<string>"
          }
        ],
        "studio": "<string>",
        "subtype": "<string>",
        "summary": "<string>",
        "tagline": "<string>",
        "theme": "/library/metadata/1/theme/1705636920",
        "thumb": "/library/metadata/58683/thumb/1703239236",
        "titleSort": "<string>",
        "updatedAt": 123,
        "userRating": 5,
        "viewCount": 123,
        "viewedLeafCount": 123,
        "viewOffset": 123,
        "Writer": [
          {
            "tag": "Shaun Lawton",
            "confidence": 123,
            "context": "<string>",
            "filter": "actor=49",
            "id": 123,
            "ratingKey": "58683",
            "role": "Secretary",
            "tagKey": "5d3ee12c4cde6a001c3e0b27",
            "tagType": 123,
            "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"
          }
        ],
        "year": 123
      }
    ]
  }
}

Authorizations

X-Plex-Token
string
header
required

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

Headers

accepts
enum<string>
default:application/xml

Indicates the client accepts the indicated media types

Available options:
application/json,
application/xml
X-Plex-Client-Identifier
string
required

An opaque identifier unique to the client

Example:

"abc123"

X-Plex-Product
string

The name of the client product

Example:

"Plex for Roku"

X-Plex-Version
string

The version of the client application

Example:

"2.4.1"

X-Plex-Platform
string

The platform of the client

Example:

"Roku"

X-Plex-Platform-Version
string

The version of the platform

Example:

"4.3 build 1057"

X-Plex-Device
string

A relatively friendly name for the client device

Example:

"Roku 3"

X-Plex-Model
string

A potentially less friendly identifier for the device model

Example:

"4200X"

X-Plex-Device-Vendor
string

The device vendor

Example:

"Roku"

X-Plex-Device-Name
string

A friendly name for the client

Example:

"Living Room TV"

X-Plex-Marketplace
string

The marketplace on which the client application is distributed

Example:

"googlePlay"

Query Parameters

uri
string

The content URI for what we're playing (e.g. library://...).

playQueueID
integer

To create a playlist from an existing play queue.

Response

OK

MediaContainer
object

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.