Plex Updater API

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.

Operations 3

GET /updater/status Querying status of updates #
PUT /updater/check Checking for updates #
PUT /updater/apply Applying updates #

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-updater-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-updater-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Plex Media Server Updater 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: 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.'
paths:
  /updater/status:
    get:
      tags:
      - Updater
      security:
      - user_token:
        - admin
      summary: Querying status of updates
      description: Get the status of updating the server
      operationId: updaterGetStatus
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  MediaContainer:
                    allOf:
                    - type: object
                      properties:
                        canInstall:
                          type: boolean
                          description: Indicates whether this install can be updated through these endpoints (typically only on MacOS and Windows)
                        autoUpdateVersion:
                          type: integer
                          description: The version of the updater (currently `1`)
                        checkedAt:
                          type: integer
                          description: The last time a check for updates was performed
                        downloadURL:
                          type: string
                          description: The URL where the update is available
                        status:
                          type: integer
                          description: The current error code (`0` means no error)
                        Release:
                          type: array
                          items:
                            type: object
                            properties:
                              key:
                                type: string
                                description: The URL key of the update
                              version:
                                type: string
                                description: The version available
                              added:
                                type: string
                                description: A list of what has been added in this version
                              fixed:
                                type: string
                                description: A list of what has been fixed in this version
                              downloadURL:
                                type: string
                                description: The URL of where this update is available
                              state:
                                type: string
                                enum:
                                - available
                                - downloading
                                - downloaded
                                - installing
                                - tonight
                                - skipped
                                - error
                                - notify
                                - done
                                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

                                  '
              examples:
                status:
                  description: An example of update status
                  value:
                    MediaContainer:
                      size: 1
                      autoUpdateVersion: 1
                      canInstall: true
                      checkedAt: 1715109491
                      downloadURL: https://plex.tv/downloads/latest/5?channel=16&build=windows-x86_64&distro=windows&X-Plex-Token=xxxxxxxxxxxxxxxxxxxx
                      status: 0
                      Release:
                      - key: https://plex.tv/updater/releases/5315
                        version: 1.40.2.8395-c67dce28e
                        added: '(PLEASE NOTE) Please also be patient when updating to this version if you have a very large database and allow the upgrade process to finish.

                          Rename ''un/played'' to ''un/watched'' terminology for video types (PM-1042)

                          We have identified an issue where automatic updates were not respecting custom paths for existing Windows 64-bit installs. Unfortunately, any automatic fix would introduce security vulnerabilities so we encourage users who installed in a custom path to uninstall and then manually reinstall Plex Media Server.'
                        fixed: '(Auto Update) Custom install paths are not respected when auto-updating on 64 bit Windows. (PM-1143)

                          (CreditsDetection) Retry detection only a limited amount of times on failures (PM-1093)

                          (DB Optimize) Server could become unresponsive during a DB optimize in certain circumstances (PM-1129)

                          (History) Query parsing would return Bad Request when encountering includeFields arguments.

                          (History) View history would yield fewer entries than requested (PM-1306)

                          (Loudness Analysis) Some files could cause errors when preforming Loudness Analysis. (PM-627)

                          (Mac) Linker optimization would incorrectly generate code that would cause the server to unexpectedly exit while syncing view state. (PM-1308)

                          (Nvidia Shield) Running on Nvidia Shield would result in ''core component problem'' error. (PM-1364)

                          (Push Notifications) Used expensive DB query during playback progress notifications (PM-1166)

                          (Thumbnails) Thumbnails were not properly updated when underlying file changed (PM-1162)

                          (Trailers) Premium trailers and extras could fail to load (PM-1347)

                          (Transcoder) On Windows, headless (no display attached) Nvidia cards were not recognized (PM-962)

                          (Transcoder) On Windows, the first Intel device was used for transcoding regardless of which Intel device was selected (PM-962)'
                        downloadURL: https://plex.tv/downloads/latest/5?channel=16&build=windows-x86_64&distro=windows&X-Plex-Token=xxxxxxxxxxxxxxxxxxxx
                        state: available
  /updater/check:
    put:
      tags:
      - Updater
      security:
      - user_token:
        - admin
      summary: Checking for updates
      description: Perform an update check and potentially download
      operationId: updaterPutCheck
      parameters:
      - in: query
        name: download
        schema:
          type: integer
          enum:
          - 0
          - 1
        description: Indicate that you want to start download any updates found.
      responses:
        '200':
          $ref: '#/components/responses/200'
  /updater/apply:
    put:
      tags:
      - Updater
      security:
      - user_token:
        - admin
      summary: Applying updates
      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.
      operationId: updaterPutApply
      parameters:
      - in: query
        name: tonight
        schema:
          type: integer
          enum:
          - 0
          - 1
        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
        name: skip
        schema:
          type: integer
          enum:
          - 0
          - 1
        description: Indicate that the latest version should be marked as skipped. The <Release> entry for this version will have the `state` set to `skipped`.
      responses:
        '200':
          description: The update process started correctly
          content:
            text/html:
              examples:
                ok:
                  summary: OK
                  value: ''
        '400':
          description: This system cannot install updates
          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>
        '500':
          description: The update process failed to start
          content:
            text/html:
              examples:
                badParam:
                  summary: Processing failed inside the server
                  value: <html><head><title>Internal Server Error</title></head><body><h1>500 Internal Server Error</h1></body></html>
components:
  responses:
    '200':
      description: OK
      content:
        text/html:
          examples:
            ok:
              summary: OK
              value: ''
  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