Plex General API

General endpoints for basic PMS operation not specific to any media provider

Operations 4

GET / Get PMS info #
GET /identity Get PMS identity #
GET /security/resources Get Source Connection Information #
POST /security/token Get Transient Tokens #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/plex-general-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

plex-general-api-openapi.yml Raw ↑
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