Skip to main content
GET
/
library
/
matches
PlexGO
package main

import(
	"context"
	"github.com/LukeHagar/plexgo/models/components"
	"github.com/LukeHagar/plexgo"
	"github.com/LukeHagar/plexgo/models/operations"
	"log"
)

func main() {
    ctx := context.Background()

    s := plexgo.New(
        plexgo.WithAccepts(components.AcceptsApplicationXML),
        plexgo.WithClientIdentifier("abc123"),
        plexgo.WithProduct("Plex for Roku"),
        plexgo.WithVersion("2.4.1"),
        plexgo.WithPlatform("Roku"),
        plexgo.WithPlatformVersion("4.3 build 1057"),
        plexgo.WithDevice("Roku 3"),
        plexgo.WithModel("4200X"),
        plexgo.WithDeviceVendor("Roku"),
        plexgo.WithDeviceName("Living Room TV"),
        plexgo.WithMarketplace("googlePlay"),
        plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
    )

    res, err := s.Library.GetLibraryMatches(ctx, operations.GetLibraryMatchesRequest{
        IncludeFullMetadata: components.BoolIntOne.ToPointer(),
        IncludeAncestorMetadata: components.BoolIntOne.ToPointer(),
        IncludeAlternateMetadataSources: components.BoolIntOne.ToPointer(),
    })
    if err != nil {
        log.Fatal(err)
    }
    if res.MediaContainerWithMetadata != nil {
        // handle response
    }
}
{
  "MediaContainer": {
    "identifier": "<string>",
    "offset": 123,
    "size": 123,
    "totalSize": 123,
    "Metadata": [
      {
        "title": "<any>",
        "type": "<any>",
        "absoluteIndex": 123,
        "addedAt": 123,
        "art": "<any>",
        "audienceRating": 5,
        "audienceRatingImage": "<any>",
        "Autotag": [
          {
            "confidence": 123,
            "context": "<string>",
            "filter": "<any>",
            "id": 123,
            "ratingKey": "<string>",
            "role": "<any>",
            "tag": "<any>",
            "tagKey": "<any>",
            "tagType": 123,
            "thumb": "<any>"
          }
        ],
        "banner": "<any>",
        "chapterSource": "<any>",
        "composite": "<any>",
        "contentRating": "<any>",
        "Country": [
          {
            "confidence": 123,
            "context": "<string>",
            "filter": "<any>",
            "id": 123,
            "ratingKey": "<string>",
            "role": "<any>",
            "tag": "<any>",
            "tagKey": "<any>",
            "tagType": 123,
            "thumb": "<any>"
          }
        ],
        "Director": [
          {
            "confidence": 123,
            "context": "<string>",
            "filter": "<any>",
            "id": 123,
            "ratingKey": "<string>",
            "role": "<any>",
            "tag": "<any>",
            "tagKey": "<any>",
            "tagType": 123,
            "thumb": "<any>"
          }
        ],
        "duration": 123,
        "Filter": [
          {
            "title": "<string>",
            "type": "<string>",
            "art": "<string>",
            "content": true,
            "filter": "<string>",
            "hasPrefs": true,
            "hasStoreServices": true,
            "hubKey": "<string>",
            "identifier": "<string>",
            "key": "<string>",
            "lastAccessedAt": 123,
            "Pivot": [
              {}
            ],
            "share": 123,
            "thumb": "<string>",
            "titleBar": "<string>",
            "filterType": "<string>"
          }
        ],
        "Genre": [
          {
            "confidence": 123,
            "context": "<string>",
            "filter": "<any>",
            "id": 123,
            "ratingKey": "<string>",
            "role": "<any>",
            "tag": "<any>",
            "tagKey": "<any>",
            "tagType": 123,
            "thumb": "<any>"
          }
        ],
        "grandparentArt": "<string>",
        "grandparentHero": "<string>",
        "grandparentKey": "<string>",
        "grandparentRatingKey": "<string>",
        "grandparentTheme": "<string>",
        "grandparentThumb": "<string>",
        "grandparentTitle": "<string>",
        "Guid": [
          {
            "confidence": 123,
            "context": "<string>",
            "filter": "<any>",
            "id": 123,
            "ratingKey": "<string>",
            "role": "<any>",
            "tag": "<any>",
            "tagKey": "<any>",
            "tagType": 123,
            "thumb": "<any>"
          }
        ],
        "hero": "<any>",
        "Image": [
          {
            "type": "background",
            "alt": "<string>",
            "url": "<string>"
          }
        ],
        "index": 123,
        "key": "<any>",
        "lastViewedAt": 123,
        "leafCount": 123,
        "Media": [
          {
            "aspectRatio": 2.35,
            "audioChannels": 2,
            "audioCodec": "<any>",
            "audioProfile": "<any>",
            "bitrate": 5612,
            "container": "<any>",
            "duration": 150192,
            "has64bitOffsets": false,
            "hasVoiceActivity": true,
            "height": 544,
            "id": 1,
            "optimizedForStreaming": false,
            "Part": [
              {
                "audioProfile": "<any>",
                "container": "<any>",
                "duration": 150192,
                "file": "<any>",
                "has64bitOffsets": false,
                "id": 1,
                "key": "<any>",
                "optimizedForStreaming": false,
                "size": 105355654,
                "Stream": [
                  {
                    "default": true,
                    "audioChannelLayout": "<any>",
                    "bitDepth": 8,
                    "bitrate": 5466,
                    "canAutoSync": true,
                    "chromaLocation": "<any>",
                    "chromaSubsampling": "<any>",
                    "codec": "<any>",
                    "colorPrimaries": "<any>",
                    "colorRange": "<any>",
                    "colorSpace": "<any>",
                    "colorTrc": "<any>",
                    "displayTitle": "<any>",
                    "frameRate": 23.976,
                    "hasScalingMatrix": "<any>",
                    "height": 544,
                    "id": 1,
                    "index": 0,
                    "key": "<any>",
                    "language": "<any>",
                    "languageCode": "<any>",
                    "level": 31,
                    "profile": "<any>",
                    "refFrames": 2,
                    "samplingRate": 48000,
                    "selected": true,
                    "streamIdentifier": 1,
                    "streamType": 1,
                    "width": 1280
                  }
                ],
                "videoProfile": "<any>"
              }
            ],
            "videoCodec": "<any>",
            "videoFrameRate": "<any>",
            "videoProfile": "<any>",
            "videoResolution": "<any>",
            "width": 1280
          }
        ],
        "originallyAvailableAt": "<any>",
        "originalTitle": "<any>",
        "parentHero": "<string>",
        "parentIndex": 123,
        "parentKey": "<string>",
        "parentRatingKey": "<string>",
        "parentThumb": "<string>",
        "parentTitle": "<string>",
        "primaryExtraKey": "<any>",
        "prompt": "<string>",
        "rating": 5,
        "Rating": [
          {
            "confidence": 123,
            "context": "<string>",
            "filter": "<any>",
            "id": 123,
            "ratingKey": "<string>",
            "role": "<any>",
            "tag": "<any>",
            "tagKey": "<any>",
            "tagType": 123,
            "thumb": "<any>"
          }
        ],
        "ratingCount": 123,
        "ratingImage": "<any>",
        "ratingKey": "<any>",
        "Role": [
          {
            "confidence": 123,
            "context": "<string>",
            "filter": "<any>",
            "id": 123,
            "ratingKey": "<string>",
            "role": "<any>",
            "tag": "<any>",
            "tagKey": "<any>",
            "tagType": 123,
            "thumb": "<any>"
          }
        ],
        "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": [
              {}
            ],
            "share": 123,
            "thumb": "<string>",
            "titleBar": "<string>",
            "default": "asc",
            "defaultDirection": "asc",
            "descKey": "<string>",
            "firstCharacterKey": "<string>"
          }
        ],
        "studio": "<any>",
        "subtype": "<any>",
        "summary": "<any>",
        "tagline": "<any>",
        "theme": "<any>",
        "thumb": "<any>",
        "titleSort": "<any>",
        "updatedAt": 123,
        "userRating": 5,
        "viewCount": 123,
        "viewedLeafCount": 123,
        "viewOffset": 123,
        "Writer": [
          {
            "confidence": 123,
            "context": "<string>",
            "filter": "<any>",
            "id": 123,
            "ratingKey": "<string>",
            "role": "<any>",
            "tag": "<any>",
            "tagKey": "<any>",
            "tagType": 123,
            "thumb": "<any>"
          }
        ],
        "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

type
integer

The metadata type to filter by

includeFullMetadata
enum<integer>
Available options:
0,
1
includeAncestorMetadata
enum<integer>
Available options:
0,
1
includeAlternateMetadataSources
enum<integer>
Available options:
0,
1
guid
string

Used for movies, shows, artists, albums, and tracks. Allowed for various URI schemes, to be defined.

title
string

The title to filter by or assign

year
integer

Used for movies shows, and albums. Optional.

path
string

Used for movies, episodes, and tracks. The full path to the media file, used for "cloud-scanning" an item.

grandparentTitle
string

Used for episodes and tracks. The title of the show/artist. Required if path isn't passed.

grandparentYear
integer

Used for episodes. The year of the show.

parentIndex
integer

Used for episodes and tracks. The season/album number.

index
integer

Used for episodes and tracks. The episode/tracks number in the season/album.

originallyAvailableAt
string

Used for episodes. In the format YYYY-MM-DD.

parentTitle
string

Used for albums and tracks. The artist name for albums or the album name for tracks.

Response

200 - application/json

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.