Title metadata endpoints for movies and series #146

Closed
opened 2026-08-23 19:41:18 +01:00 by naps62-yolo · 0 comments
Owner

Depends on: #143

The detail pages (#149, #150) need everything §9.6 lists for one title, and they
should need one request to get it.

GET /api/movies/{id}/metadata
GET /api/series/{id}/metadata

Both resolve the local row, take its tmdb_id, and call the matching detail
method from #143. One upstream request each, cached 24h, nothing persisted.

The response carries the §9.6 set: overview, tagline, genres, runtime,
status, poster_path, backdrop_path, vote_average, vote_count,
homepage, the top-10 cast, the chosen trailer, and the external ids the
links are built from (imdb_id for a movie, tvdb_id for a series, tmdb_id
for both).

  • Path fragments, not URLs. poster_path, backdrop_path and each cast
    member's profile_path go out exactly as TMDB sends them, matching how
    TmdbMovie already reports poster_path. §9.6 hotlinks images and the
    browser picks the size.
  • The Rotten Tomatoes link is a search URL built in the browser from the title.
    Nothing about it belongs in this response — the API has no RT identifier and
    must not imply it does.
  • No TMDB key configured is a 503 with the same error body as elsewhere in
    arr-api. An unknown local id is a 404.
  • Annotate for OpenAPI like the surrounding handlers.

Library titles only. Search rows for titles that are not in the library already
carry poster, overview and rating from the TMDB search response, and their
trailer chip goes through #144 — so there is no TMDB-id form of this endpoint
and adding one would be scope that nothing calls.

Do not start until blitz/tv-tracking is on main — it rewrites
arr-api/src/series.rs and search.rs.

Depends on: #143 The detail pages (#149, #150) need everything §9.6 lists for one title, and they should need one request to get it. ``` GET /api/movies/{id}/metadata GET /api/series/{id}/metadata ``` Both resolve the local row, take its `tmdb_id`, and call the matching detail method from #143. One upstream request each, cached 24h, nothing persisted. The response carries the §9.6 set: `overview`, `tagline`, `genres`, `runtime`, `status`, `poster_path`, `backdrop_path`, `vote_average`, `vote_count`, `homepage`, the top-10 `cast`, the chosen `trailer`, and the external ids the links are built from (`imdb_id` for a movie, `tvdb_id` for a series, `tmdb_id` for both). - **Path fragments, not URLs.** `poster_path`, `backdrop_path` and each cast member's `profile_path` go out exactly as TMDB sends them, matching how `TmdbMovie` already reports `poster_path`. §9.6 hotlinks images and the browser picks the size. - The Rotten Tomatoes link is a search URL built in the browser from the title. Nothing about it belongs in this response — the API has no RT identifier and must not imply it does. - No TMDB key configured is a 503 with the same error body as elsewhere in `arr-api`. An unknown local id is a 404. - Annotate for OpenAPI like the surrounding handlers. Library titles only. Search rows for titles that are not in the library already carry poster, overview and rating from the TMDB search response, and their trailer chip goes through #144 — so there is no TMDB-id form of this endpoint and adding one would be scope that nothing calls. **Do not start until `blitz/tv-tracking` is on main** — it rewrites `arr-api/src/series.rs` and `search.rs`.
naps62-yolo added this to the Rich metadata milestone 2026-08-23 19:41:18 +01:00
naps62-yolo added the area/apidifficulty/moderatephase/6-tvtype/feature labels 2026-08-23 19:41:18 +01:00
naps62-yolo added a new dependency 2026-08-23 19:42:42 +01:00
naps62-yolo added a new dependency 2026-08-23 19:42:42 +01:00
naps62-yolo added phase/5-ui and removed phase/6-tv labels 2026-08-23 19:42:55 +01:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: yolo/arr#146