Plex General API
General endpoints for basic PMS operation not specific to any media provider
General endpoints for basic PMS operation not specific to any media provider
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/plex-general-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Plex Media Server General API
version: '1.2.2
'
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
description: '# API Info
## Content Types
The API supports responses in both XML and JSON, and clients can request one or the other using the standard `Accept` HTTP header.'
servers:
- url: https://{IP-description}.{identifier}.plex.direct:{port}
variables:
IP-description:
default: 1-2-3-4
description: A `-` separated string of the IPv4 or IPv6 address components
identifier:
default: 0123456789abcdef0123456789abcdef
description: The unique identifier of this particular PMS
port:
default: '32400'
security:
- user_token:
- shared user
- admin
tags:
- name: General
description: General endpoints for basic PMS operation not specific to any media provider
paths:
/:
get:
tags:
- General
summary: Get PMS info
description: Information about this PMS setup and configuration
operationId: getSlash
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/serverConfiguration'
- type: object
properties:
Directory:
type: array
items:
type: object
properties:
count:
type: integer
key:
type: string
description: The key where this directory is found
title:
type: string
examples:
info:
value:
MediaContainer:
size: 1
allowCameraUpload: true
allowChannelAccess: true
allowMediaDeletion: true
allowSharing: true
allowSync: true
allowTuners: true
backgroundProcessing: true
certificate: true
companionProxy: true
countryCode: usa
diagnostics: logs,databases,streaminglogs
eventStream: true
friendlyName: Server Name
hubSearch: true
itemClusters: true
livetv: 7
machineIdentifier: c997cf82c4158cb986ccc0e8f829a6f5d5086a63
mediaProviders: true
multiuser: true
musicAnalysis: 2
myPlex: true
myPlexMappingState: mapped
myPlexSigninState: ok
myPlexSubscription: true
myPlexUsername: me@somewhere.else
offlineTranscode: 1
ownerFeatures": adaptive_bitrate,advanced-playback-settings,camera_upload,collections,content_filter,download_certificates,dvr,federated-auth,hardware_transcoding,home,hwtranscode,item_clusters,kevin-bacon,livetv,loudness,lyrics,music-analysis,music_videos,pass,photosV6-edit,photosV6-tv-albums,premium_music_metadata,radio,session_bandwidth_restrictions,session_kick,shared-radio,sync,trailers,tuner-sharing,type-first,ump-matching-pref,unsupportedtuners,webhooks
platform: MacOSX
platformVersion: 14.4.1
pluginHost: true
pushNotifications: false
readOnlyLibraries: false
streamingBrainABRVersion: 3
streamingBrainVersion: 2
sync: true
transcoderActiveVideoSessions: 0
transcoderAudio: true
transcoderLyrics: true
transcoderPhoto: true
transcoderSubtitles: true
transcoderVideo: true
transcoderVideoBitrates: 64,96,208,320,720,1500,2000,3000,4000,8000,10000,12000,20000
transcoderVideoQualities: 0,1,2,3,4,5,6,7,8,9,10,11,12
transcoderVideoResolutions: 128,128,160,240,320,480,768,720,720,1080,1080,1080,1080
updatedAt: 1714653009
updater: true
version: 1.40.2.8395-c67dce28e
voiceSearch: true
Directory:
- count: 1
key: key
title: title
/identity:
get:
tags:
- General
summary: Get PMS identity
description: Get details about this PMS's identity
operationId: getIdentity
security:
- {}
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
MediaContainer:
type: object
properties:
size:
type: integer
claimed:
type: boolean
description: Indicates whether this server has been claimed by a user
machineIdentifier:
type: string
description: A unique identifier of the computer
version:
type: string
description: The full version string of the PMS
examples:
identity:
value:
MediaContainer:
size: 1
claimed: true
machineIdentifier: 0123456789abcdef0123456789abcdef
version: 1.40.2.8395-c67dce28e
/security/resources:
get:
tags:
- General
summary: Get Source Connection Information
description: If a caller requires connection details and a transient token for a source that is known to the server, for example a cloud media provider or shared PMS, then this endpoint can be called. This endpoint is only accessible with either an admin token or a valid transient token generated from an admin token.
operationId: securityGetResources
parameters:
- in: query
name: source
schema:
type: string
required: true
description: The source identifier with an included prefix.
- in: query
name: refresh
schema:
type: integer
enum:
- 0
- 1
description: Force refresh
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/MediaContainer'
- type: object
properties:
Device:
type: object
properties:
name:
type: string
clientIdentifier:
type: string
accessToken:
type: string
Connection:
type: array
items:
type: object
properties:
protocol:
type: string
address:
type: string
uri:
type: string
port:
type: integer
local:
type: boolean
description: Indicates if the connection is the server's LAN address
relay:
type: boolean
description: Indicates the connection is over a relayed connection
examples:
resource:
description: An example of a resource for a remote server
value:
MediaContainer:
size: 1
Device:
name: PlexCorp (plex-corp)
clientIdentifier: 243b471948ace337a8f92f129ec97d1902fcb1df
accessToken: transient-fa75f159-b9d2-42b6-8fbd-1761c7a4195a
Connection:
- protocol: https
address: 10.0.2.123
uri: https://10-0-2-123.93b10b279ff8456686414add109854cd.plex.direct:32400
port: 32400
local: true
- protocol: https
address: 64.71.188.222
uri: https://64-71-188-222.93b10b279ff8456686414add109854cd.plex.direct:32403
port: 32403
local: false
- protocol: https
address: 139.162.158.105
uri: https://139-162-158-105.93b10b279ff8456686414add109854cd.plex.direct:8443
port: 8443
local: false
relay: true
'400':
description: A query param is missing or the wrong value
content:
text/html:
examples:
badRequest:
summary: A parameter has a bad value or required parameter is missing
value: <html><head><title>Bad Request</title></head><body><h1>400 Bad Request</h1></body></html>
'403':
description: Invalid or no token provided or a transient token could not be created
content:
text/html:
examples:
forbidden:
summary: Forbidden
value: <html><head><title>Forbidden</title></head><body><h1>403 Forbidden</h1></body></html>
/security/token:
post:
tags:
- General
summary: Get Transient Tokens
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'
operationId: securityPostToken
parameters:
- in: query
name: type
schema:
type: string
enum:
- delegation
required: true
description: The value `delegation` is the only supported `type` parameter.
- in: query
name: scope
schema:
type: string
enum:
- all
required: true
description: The value `all` is the only supported `scope` parameter.
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
MediaContainer:
allOf:
- $ref: '#/components/schemas/mediaContainer'
- type: object
properties:
token:
type: string
description: The transient token
examples:
token:
description: An example of a transient token
value:
MediaContainer:
size: 0
token: transient-90904684-f91a-4391-8bf7-e0dfa7240285
'400':
description: A query param is missing or the wrong value
content:
text/html:
examples:
badRequest:
summary: A parameter has a bad value or required parameter is missing
value: <html><head><title>Bad Request</title></head><body><h1>400 Bad Request</h1></body></html>
'403':
description: Invalid or no token provided or a transient token could not be created
content:
text/html:
examples:
forbidden:
summary: Forbidden
value: <html><head><title>Forbidden</title></head><body><h1>403 Forbidden</h1></body></html>
components:
schemas:
mediaContainer:
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:
type: object
properties:
identifier:
type: string
size:
type: integer
totalSize:
type: integer
description: The total size of objects available. Also provided in the X-Plex-Container-Total-Size header
offset:
type: integer
description: The offset of where this container page starts among the total objects available. Also provided in the X-Plex-Container-Start header
MediaContainer:
type: object
properties:
identifier:
type: string
size:
type: integer
totalSize:
type: integer
description: The total size of objects available. Also provided in the X-Plex-Container-Total-Size header
offset:
type: integer
description: The offset of where this container page starts among the total objects available. Also provided in the X-Plex-Container-Start header
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
securitySchemes:
user_token:
type: apiKey
in: header
name: X-Plex-Token
description: The token which identifies the user accessing the PMS. This is typically provided to the client by plex.tv. This can be either a traditional access token or a JWT token obtained through the JWT authentication flow.
x-tagGroups:
- name: General
tags:
- General
- Library
- Library Playlists
- Library Collections
- Status
- Activities
- Updater
- Butler
- Events
- Log
- Preferences
- Download Queue
- UltraBlur
- Transcoder
- name: Media Provider
tags:
- Provider
- Metadata Agents
- Content
- Hubs
- Search
- Rate
- Playlist
- Play Queue
- Timeline
- name: DVR
tags:
- DVRs
- Devices
- EPG
- Subscriptions
- Live TV