🍿 @lorenzopant/tmdb

Details

Get the top level details of a movie by ID.

Get the top level details of a movie by ID. Supports appending sub-resources in a single request via append_to_response.

async details<T extends readonly MovieAppendToResponseNamespace[] = []>(
  params: MovieDetailsParams & { append_to_response?: T }
): Promise<T extends [] ? MovieDetails : MovieDetailsWithAppends<T>>

TMDB Reference: Movie Details

Parameters

NameTypeRequiredDescription
movie_idnumber✅TMDB movie identifier.
append_to_responseMovieAppendToResponseNamespace[]❌Sub-resources to append to the response.
languageLanguage❌Language for localized results. Defaults to en-US.
include_image_language(Language | "null")[]❌Extra languages for an appended images block. Serialized comma-separated.
include_video_languagestring❌Extra video languages for an appended videos block, as comma-separated ISO 639-1 codes (e.g. "it,en,null").

When you append images and pass a language, TMDB treats the language as a filter on the appended block and returns only images tagged with it. Logos are always language-tagged and most backdrops are untagged, so both come back empty. Pass include_image_language to get them:

const movie = await tmdb.movies.details({
	movie_id: 550,
	language: "it-IT",
	append_to_response: ["images"],
	include_image_language: ["null", "en"], // untagged + English
});
// 68 posters, 87 backdrops, 23 logos
// without include_image_language: 3 posters, 0 backdrops, 0 logos

Use "null" for untagged images (textless posters, most backdrops), and pair it with at least one real language code — ["null"] alone still returns zero logos.

Appended videos follow the same rule: with a language set, TMDB returns only videos tagged with it. Pass include_video_language to keep the English trailers too:

const movie = await tmdb.movies.details({
	movie_id: 550,
	language: "it-IT",
	append_to_response: ["videos"],
	include_video_language: "it,en",
});

Returns

MovieDetails when no appends are provided, or MovieDetailsWithAppends<T> when append_to_response is specified.

Example

// Basic details
const movie = await tmdb.movies.details({ movie_id: 550 });
console.log(movie.title); // "Fight Club"

// With appended data
const movie = await tmdb.movies.details({
	movie_id: 550,
	append_to_response: ["credits", "videos", "images"],
});
console.log(movie.credits.cast);
console.log(movie.videos.results);

On this page