generated: '2026-08-05' method: searched source: https://developer.plex.tv/pms/#section/API-Info docs: https://developer.plex.tv/pms/ authentication: style: api-key header header: X-Plex-Token query_parameter_accepted: true token_forms: - legacy long-lived token - 7-day Plex JWT (Ed25519 / EdDSA) detail: authentication/plex-authentication.yml content_negotiation: default: application/xml json: 'Send the header Accept: application/json. Plex documentation states new applications should use JSON.' note: The response body shape is identical between the two — a MediaContainer root with typed child arrays. client_headers: pattern: X-Plex-{name} required: - X-Plex-Client-Identifier - X-Plex-Token common: - X-Plex-Product - X-Plex-Version - X-Plex-Platform - X-Plex-Platform-Version - X-Plex-Device - X-Plex-Model - X-Plex-Device-Vendor - X-Plex-Device-Name - X-Plex-Marketplace encoding_note: There is no standard way to send non-ASCII HTTP header values. Plex attempts to parse UTF-8 and ISO-8859-1; use UTF-8 where possible. pagination: style: offset headers request_headers: - name: X-Plex-Container-Start description: The desired starting offset. - name: X-Plex-Container-Size description: The desired number of items. A size of 0 returns the total count with no content. - name: X-Plex-Container-Focus-Key description: The key of an item to centre the page on, instead of an offset. response_headers: - name: X-Plex-Container-Start description: The offset of the first returned item. - name: X-Plex-Container-Total-Size description: The total size of the collection. Optional but typically present. response_fields: container: MediaContainer fields: - size - totalSize - offset query_parameter: name: limit note: Endpoints supporting rich media queries also accept limit. Using limit is cheaper because the total size need not be computed, but the true total is then not returned. limit and X-Plex-Container-Size compose — for example limit=1000&X-Plex-Container-Size=20&X-Plex-Container-Start=0. caution: A response must be checked to see whether it is in fact paginated. It may not be paginated at all, or may contain a different number of items than requested. field_selection: parameters: - name: includeFields meaning: Return ONLY these fields. note: Semantics changed at API 1.0.0 — this parameter previously meant "additionally include these fields". - name: includeOptionalFields meaning: Additionally include these normally-omitted fields. The renamed form of the pre-1.0.0 includeFields. docs: https://developer.plex.tv/pms/#section/API-Info/Response-Customization query_language: name: Media Queries docs: https://developer.plex.tv/pms/#section/API-Info/Media-Queries features: - fields - operators - relative values and units - field scoping - sorting - grouping - limits - boolean operators - complex expressions versioning: scheme: request header header: X-Plex-Pms-Api-Version current: 1.2.2 default_when_absent: '0.0' note: PMS used no API versioning before the September 2025 publication. The first published API is 1.0; everything prior is 0.0. Each API version declares the minimum Plex Media Server build that supports it. detail: lifecycle/plex-lifecycle.yml idempotency: supported: false note: Plex documents no idempotency key, no request-replay contract and no Idempotency-Key parameter anywhere in the 258-operation OpenAPI. Retrying a write is not safe by contract. Recorded as absent — no Idempotency pointer is emitted in apis.yml. rate_limiting: documented: false note: No published quota, no rate-limit response headers, and no 429 in any of the 258 operations. Plex Media Server is self-hosted, so throughput is bounded by the operator's own hardware rather than by a vendor quota. request_tracing: plex_tv: header: x-request-id observed_on: https://plex.tv/internal/mcp note: Observed on live plex.tv responses. Not documented, and not present on the self-hosted Plex Media Server. errors: envelope: none content_types: - text/html note: Branch on HTTP status. See errors/plex-problem-types.yml. events: webhooks: asyncapi/plex-webhooks.yml streaming: - operationId: websocketGetSlash path: /:/websocket/notifications transport: WebSocket - operationId: eventsourceGetSlash path: /:/eventsource/notifications transport: Server-Sent Events cross_links: authentication: authentication/plex-authentication.yml scopes: scopes/plex-scopes.yml errors: errors/plex-problem-types.yml lifecycle: lifecycle/plex-lifecycle.yml changelog: changelog/plex-changelog.yml data_model: data-model/plex-data-model.yml x-evidence: - fetched: '2026-08-05' url: https://developer.plex.tv/pms/ http_status: 200