# Recorded API fixtures Response shapes recorded from real servers (plex-safety rule 11). Identifying values (names, ids, tokens, hostnames) are sanitized; structure and field names are verbatim. > **XML fixtures must NOT use a bare `.xml` extension — use `.xml.txt`.** Unraid Community > Applications scans every `*.xml` file in the repo looking for app templates, and flags any that > isn't one as `not_unraid_application`, which shows as a failed check on our CA submission. The > content is still plain XML; only the filename differs. | File | Source | Recorded | | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- | | `pms_managed_hubs.xml.txt` | PMS 1.43.3.10896 `GET /hubs/sections/1/manage` (XML), the endpoint `LibrarySection.managedHubs()` reads — captured off a real PMS's Movies library, 70 hubs reduced to 8, titles neutralised (the real ones name individual people, via each row's per-account title marker). Settles what `is_collection_hub` matches: a COLLECTION's hub is `custom.collection..` here (a single ratingKey — the DOUBLED form in `pms_hubs_shared_account.json` is `/hubs`, a different endpoint), and built-in hubs use their own families (`movie.recentlyadded`, `recent.library.playlists`). Built-ins DO carry all three `promotedTo*` flags, so the guard's fail-open path is belt-and-braces rather than load-bearing; `deletable` is present on collections and absent on built-ins. **Note what is NOT here: not one collection on this server had `promotedToRecommended=0`.** Every hub with all three flags off is a built-in the owner switched off. So either Plex promotes a new collection to Recommended by default, or an off-shelf collection is absent from this listing entirely — unresolved, and it bears on whether issue #106's anchor case is reachable in practice | 2026-08-30 | | `pms_managed_hub_renamed_collection.json` | PMS 1.43.4.10903 — one Shortlist row's collection read three ways moments after an in-place rename, off a real PMS's Movies library: `GET /hubs/sections/1/manage`, `GET /library/metadata/` and `GET /hubs/sections/1`. ratingKey neutralised, per-account title markers stripped. Settles why `place_rows` identifies a hub by the ratingKey in its identifier and not by title: **the manage listing keeps the title the collection had when it was promoted**, while the collection and the hub viewers are served both carry the new one. Matched by title, a renamed row reads as somebody else's collection. On one real server 15 of 93 promoted rows in one library were in that state after one night | 2026-09-16 | | `pms_hubs_home.json` | PMS 1.43.3 `GET /hubs` (JSON) — reconstructed from the live Phase 0 probe observations (collection hub `key`/`context` shapes); re-record with a direct capture when convenient | 2026-07-12 | | `plextv_users.xml.txt` | plex.tv `GET /api/users` — field-verified live in Phase 0 (share filters as `` attributes) | 2026-07-12 | | `plextv_resources.json` | plex.tv `GET /api/v2/resources?includeHttps=1` — the shape behind `auth.owned_machine_ids()`, which decides who may sign in to an unclaimed instance and which server they may link. Captured owned entry is real; the `owned:false` and player entries are synthesised (this account has no inbound shares) and labelled as such in `_why` | 2026-07-29 | | `pms_watched_incremental.xml.txt` | PMS 1.43.3 `GET /library/sections/{key}/all` — the watched read, plus a measured table of which query params this server honours. The headline: `unwatched=0` and `sort=lastViewedAt:desc` work, while **every cutoff-filter form (`lastViewedAt>=`, `>>=`, and a `year>>=` control) is silently ignored** and returns the full set with a 200. That is why the incremental watch-history read narrows by ordering + an early stop rather than by a filter | 2026-07-30 | | `plextv_combined_filters.json` | plex.tv `PUT /api/users/{id}` + `GET /api/users` — proof that share-filter strings are stored and returned VERBATIM: `\|`/`&` between conditions and `,`/`%2C` between values all round-trip byte-identical, with no normalization. So the shape Shortlist reads is whichever writer last touched that account (Plex Web, plexapi, or us), which is the whole of issue #77. Written to a canary account with its original value snapshotted and restored | 2026-08-10 | | `pms_collections_listing.json` | PMS 1.43.3 `GET /library/sections/{key}/all?type=18` vs `GET /library/collections/{rk}` — the collections LISTING carries **no** `