From 0bb17177eec964375f86a8e6555af2a5ca4a3fac Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Thu, 18 Sep 2025 18:57:33 +0200 Subject: [PATCH 01/14] WIP season search --- README.md | 1 + src/api/apis/TMDBMovieAPI.ts | 130 ++++++++++++++++++++++++++ src/api/apis/TMDBSeasonAPI.ts | 169 ++++++++++++++++++++++++++++++++++ src/api/apis/TMDBSeriesAPI.ts | 131 ++++++++++++++++++++++++++ src/main.ts | 6 ++ src/models/SeasonModel.ts | 80 ++++++++++++++++ src/settings/Settings.ts | 54 +++++++++++ src/utils/MediaType.ts | 1 + src/utils/MediaTypeManager.ts | 7 ++ 9 files changed, 579 insertions(+) create mode 100644 src/api/apis/TMDBMovieAPI.ts create mode 100644 src/api/apis/TMDBSeasonAPI.ts create mode 100644 src/api/apis/TMDBSeriesAPI.ts create mode 100644 src/models/SeasonModel.ts diff --git a/README.md b/README.md index 08131e6..e877f81 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,7 @@ Now you select the result you want and the plugin will cast it's magic and creat | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | | [Jikan](https://jikan.moe/) | Jikan is an API that uses [My Anime List](https://myanimelist.net) and offers metadata for anime. | series, movies, specials, OVAs, manga, manwha, novels | No | 60 per minute and 3 per second | Yes | | [OMDb](https://www.omdbapi.com/) | OMDb is an API that offers metadata for movie, series and games. | series, movies, games | Yes, you can get a free key here [here](https://www.omdbapi.com/apikey.aspx) | 1000 per day | No | +| [TMDB](https://www.themoviedb.org/) | TMDB is a API that offers community editable metadata for movies and series. | series, movies | Yes, by making an account [here](https://www.themoviedb.org/signup) and getting your `API Key` (**not** `API Read Access Token`) [here](https://www.themoviedb.org/settings/api) | 50 per second | Yes | | [MusicBrainz](https://musicbrainz.org/) | MusicBrainz is an API that offers information about music releases. | music releases | No | 50 per second | No | | [Wikipedia](https://en.wikipedia.org/wiki/Main_Page) | The Wikipedia API allows access to all Wikipedia articles. | wiki articles | No | None | No | | [Steam](https://store.steampowered.com/) | The Steam API offers information on all steam games. | games | No | 10000 per day | No | diff --git a/src/api/apis/TMDBMovieAPI.ts b/src/api/apis/TMDBMovieAPI.ts new file mode 100644 index 0000000..71494d8 --- /dev/null +++ b/src/api/apis/TMDBMovieAPI.ts @@ -0,0 +1,130 @@ +import { Notice, renderResults } from 'obsidian'; +import type MediaDbPlugin from '../../main'; +import type { MediaTypeModel } from '../../models/MediaTypeModel'; +import { MovieModel } from '../../models/MovieModel'; +import { MediaType } from '../../utils/MediaType'; +import { APIModel } from '../APIModel'; + +export class TMDBMovieAPI extends APIModel { + plugin: MediaDbPlugin; + typeMappings: Map; + apiDateFormat: string = 'YYYY-MM-DD'; + + constructor(plugin: MediaDbPlugin) { + super(); + + this.plugin = plugin; + this.apiName = 'TMDBMovieAPI'; + this.apiDescription = 'A community built Movie DB.'; + this.apiUrl = 'https://www.themoviedb.org/'; + this.types = [MediaType.Movie]; + this.typeMappings = new Map(); + this.typeMappings.set('movie', 'movie'); + } + + async searchByTitle(title: string): Promise { + console.log(`MDB | api "${this.apiName}" queried by Title`); + + if (!this.plugin.settings.TMDBKey) { + throw new Error(`MDB | API key for ${this.apiName} missing.`); + } + + const searchUrl = `https://api.themoviedb.org/3/search/movie?api_key=${this.plugin.settings.TMDBKey}&query=${encodeURIComponent(title)}&include_adult=${this.plugin.settings.sfwFilter ? 'false' : 'true'}`; + const fetchData = await fetch(searchUrl); + + if (fetchData.status === 401) { + throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); + } + if (fetchData.status !== 200) { + throw Error(`MDB | Received status code ${fetchData.status} from ${this.apiName}.`); + } + + const data = await fetchData.json(); + + if (data.total_results === 0) { + if (data.Error === 'Movie not found!') { + return []; + } + + throw Error(`MDB | Received error from ${this.apiName}: \n${JSON.stringify(data, undefined, 4)}`); + } + if (!data.results) { + return []; + } + + // console.debug(data.results); + + const ret: MediaTypeModel[] = []; + + for (const result of data.results) { + ret.push( + new MovieModel({ + type: 'movie', + title: result.original_title, + englishTitle: result.title, + year: result.release_date ? new Date(result.release_date).getFullYear().toString() : 'unknown', + dataSource: this.apiName, + id: result.id, + }), + ); + } + + return ret; + } + + async getById(id: string): Promise { + console.log(`MDB | api "${this.apiName}" queried by ID`); + + if (!this.plugin.settings.TMDBKey) { + throw Error(`MDB | API key for ${this.apiName} missing.`); + } + + const searchUrl = `https://api.themoviedb.org/3/movie/${encodeURIComponent(id)}?api_key=${this.plugin.settings.TMDBKey}&append_to_response=credits`; + const fetchData = await fetch(searchUrl); + + if (fetchData.status === 401) { + throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); + } + if (fetchData.status !== 200) { + throw Error(`MDB | Received status code ${fetchData.status} from ${this.apiName}.`); + } + + const result = await fetchData.json(); + // console.debug(result); + + return new MovieModel({ + type: 'movie', + title: result.title, + englishTitle: result.title, + year: result.release_date ? new Date(result.release_date).getFullYear().toString() : 'unknown', + premiere: this.plugin.dateFormatter.format(result.release_date, this.apiDateFormat) ?? 'unknown', + dataSource: this.apiName, + url: `https://www.themoviedb.org/movie/${result.id}`, + id: result.id, + + plot: result.overview ?? '', + genres: result.genres.map((g: any) => g.name) ?? [], + writer: result.credits.crew.filter((c: any) => c.job === 'Screenplay').map((c: any) => c.name) ?? [], + director: result.credits.crew.filter((c: any) => c.job === 'Director').map((c: any) => c.name) ?? [], + studio: result.production_companies.map((s: any) => s.name) ?? [], + + duration: result.runtime ?? 'unknown', + onlineRating: result.vote_average, + actors: result.credits.cast.map((c: any) => c.name).slice(0, 5) ?? [], + image: `https://image.tmdb.org/t/p/w780${result.poster_path}`, + + released: ['Released'].includes(result.status), + streamingServices: [], + + userData: { + watched: false, + lastWatched: '', + personalRating: 0, + }, + }); + } + + getDisabledMediaTypes(): MediaType[] { + return this.plugin.settings.TMDBMovieAPI_disabledMediaTypes as MediaType[]; + } +} diff --git a/src/api/apis/TMDBSeasonAPI.ts b/src/api/apis/TMDBSeasonAPI.ts new file mode 100644 index 0000000..dab2fc2 --- /dev/null +++ b/src/api/apis/TMDBSeasonAPI.ts @@ -0,0 +1,169 @@ +import { Notice, renderResults } from 'obsidian'; +import type MediaDbPlugin from '../../main'; +import type { MediaTypeModel } from '../../models/MediaTypeModel'; +import { MediaType } from '../../utils/MediaType'; +import { APIModel } from '../APIModel'; +import { SeasonModel } from '../../models/SeasonModel'; + +export class TMDBSeasonAPI extends APIModel { + plugin: MediaDbPlugin; + typeMappings: Map; + apiDateFormat: string = 'YYYY-MM-DD'; + + constructor(plugin: MediaDbPlugin) { + super(); + this.plugin = plugin; + this.apiName = 'TMDBSeasonAPI'; + this.apiDescription = 'A community built Series DB (seasons).'; + this.apiUrl = 'https://www.themoviedb.org/'; + this.types = [MediaType.Season]; + this.typeMappings = new Map(); + this.typeMappings.set('tv', 'season'); + } + + async searchByTitle(title: string): Promise { + console.log(`MDB | api "${this.apiName}" queried by Title`); + + if (!this.plugin.settings.TMDBKey) { + throw new Error(`MDB | API key for ${this.apiName} missing.`); + } + + // 1) Search for series + const searchUrl = `https://api.themoviedb.org/3/search/tv?api_key=${this.plugin.settings.TMDBKey}&query=${encodeURIComponent(title)}&include_adult=${this.plugin.settings.sfwFilter ? 'false' : 'true'}`; + const searchResp = await fetch(searchUrl); + + if (searchResp.status === 401) { + throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); + } + if (searchResp.status !== 200) { + throw Error(`MDB | Received status code ${searchResp.status} from ${this.apiName}.`); + } + + const searchData = await searchResp.json(); + + if (searchData.total_results === 0 || !searchData.results) { + return []; + } + + const ret: MediaTypeModel[] = []; + + // 2) For each series result, fetch its seasons and flatten into SeasonModel entries (cap total to 20) + for (const series of searchData.results) { + if (ret.length >= 20) break; + + const tvId = series.id; + const seriesUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}?api_key=${this.plugin.settings.TMDBKey}`; + const tvResp = await fetch(seriesUrl); + + if (tvResp.status === 401) { + throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); + } + if (tvResp.status !== 200) { + // Skip this series if it fails; do not abort the whole search + console.warn(`MDB | Skipping series ${tvId} due to status ${tvResp.status}`); + continue; + } + + const tvData = await tvResp.json(); + const seriesName = tvData?.name ?? series?.name ?? series?.original_name ?? ''; + + if (Array.isArray(tvData?.seasons)) { + for (const season of tvData.seasons) { + if (ret.length >= 20) break; + + // Some seasons (e.g., specials) may have limited metadata; handle gracefully + const seasonNumber = season.season_number ?? 0; + const airDate = season.air_date ?? ''; + const titleText = `${seriesName} - Season ${seasonNumber}`; + ret.push( + new SeasonModel({ + // SeasonModel constructor sets type to MediaType.Series internally + title: titleText, + englishTitle: titleText, + year: airDate ? new Date(airDate).getFullYear().toString() : 'unknown', + dataSource: this.apiName, + id: `${tvId}-S${seasonNumber}`, + seasonTitle: season.name ?? titleText, + seasonNumber: seasonNumber, + episodes: season.episode_count ?? 0, + airedFrom: this.plugin.dateFormatter.format(airDate, this.apiDateFormat) ?? 'unknown', + airedTo: 'unknown', + plot: season.overview ?? '', + image: season.poster_path ? `https://image.tmdb.org/t/p/w780${season.poster_path}` : '', + userData: { watched: false, lastWatched: '', personalRating: 0 }, + }), + ); + } + } + } + + return ret; + } + + async getById(id: string): Promise { + console.log(`MDB | api "${this.apiName}" queried by ID`); + + if (!this.plugin.settings.TMDBKey) { + throw Error(`MDB | API key for ${this.apiName} missing.`); + } + + // Expect season ids like "12345-S2" + const m = /^(\d+)-S(\d+)$/.exec(id); + if (!m) { + throw Error(`MDB | Invalid season id "${id}". Expected format "-S".`); + } + + const tvId = m[1]; + const seasonNumber = m[2]; + + const seasonUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}/season/${encodeURIComponent(seasonNumber)}?api_key=${this.plugin.settings.TMDBKey}`; + const seasonResp = await fetch(seasonUrl); + + if (seasonResp.status === 401) { + throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); + } + if (seasonResp.status !== 200) { + throw Error(`MDB | Received status code ${seasonResp.status} from ${this.apiName}.`); + } + + const seasonData = await seasonResp.json(); + + // Fetch parent series to build consistent titles + const seriesUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}?api_key=${this.plugin.settings.TMDBKey}`; + const seriesResp = await fetch(seriesUrl); + + if (seriesResp.status === 401) { + throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); + } + if (seriesResp.status !== 200) { + throw Error(`MDB | Received status code ${seriesResp.status} from ${this.apiName}.`); + } + + const seriesData = await seriesResp.json(); + const seriesName = seriesData?.name ?? ''; + + const airDate = seasonData.air_date ?? ''; + const titleText = `${seriesName} - Season ${seasonData.season_number}`; + + return new SeasonModel({ + title: titleText, + englishTitle: titleText, + year: airDate ? new Date(airDate).getFullYear().toString() : 'unknown', + dataSource: this.apiName, + id: `${tvId}-S${seasonData.season_number}`, + seasonTitle: seasonData.name ?? titleText, + seasonNumber: seasonData.season_number ?? Number(seasonNumber), + episodes: Array.isArray(seasonData.episodes) ? seasonData.episodes.length : (seasonData.episodes ?? 0), + airedFrom: this.plugin.dateFormatter.format(airDate, this.apiDateFormat) ?? 'unknown', + airedTo: 'unknown', + plot: seasonData.overview ?? '', + image: seasonData.poster_path ? `https://image.tmdb.org/t/p/w780${seasonData.poster_path}` : '', + userData: { watched: false, lastWatched: '', personalRating: 0 }, + }); + } + + // Settings didn’t define TMDBSeasonAPIdisabledMediaTypes yet; return an empty list for now + getDisabledMediaTypes(): MediaType[] { + return []; + } +} diff --git a/src/api/apis/TMDBSeriesAPI.ts b/src/api/apis/TMDBSeriesAPI.ts new file mode 100644 index 0000000..1fcf383 --- /dev/null +++ b/src/api/apis/TMDBSeriesAPI.ts @@ -0,0 +1,131 @@ +import { Notice, renderResults } from 'obsidian'; +import type MediaDbPlugin from '../../main'; +import type { MediaTypeModel } from '../../models/MediaTypeModel'; +import { SeriesModel } from '../../models/SeriesModel'; +import { MediaType } from '../../utils/MediaType'; +import { APIModel } from '../APIModel'; + +export class TMDBSeriesAPI extends APIModel { + plugin: MediaDbPlugin; + typeMappings: Map; + apiDateFormat: string = 'YYYY-MM-DD'; + + constructor(plugin: MediaDbPlugin) { + super(); + + this.plugin = plugin; + this.apiName = 'TMDBSeriesAPI'; + this.apiDescription = 'A community built Series DB.'; + this.apiUrl = 'https://www.themoviedb.org/'; + this.types = [MediaType.Series]; + this.typeMappings = new Map(); + this.typeMappings.set('tv', 'series'); + } + + async searchByTitle(title: string): Promise { + console.log(`MDB | api "${this.apiName}" queried by Title`); + + if (!this.plugin.settings.TMDBKey) { + throw new Error(`MDB | API key for ${this.apiName} missing.`); + } + + const searchUrl = `https://api.themoviedb.org/3/search/tv?api_key=${this.plugin.settings.TMDBKey}&query=${encodeURIComponent(title)}&include_adult=${this.plugin.settings.sfwFilter ? 'false' : 'true'}`; + const fetchData = await fetch(searchUrl); + + if (fetchData.status === 401) { + throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); + } + if (fetchData.status !== 200) { + throw Error(`MDB | Received status code ${fetchData.status} from ${this.apiName}.`); + } + + const data = await fetchData.json(); + + if (data.total_results === 0) { + if (data.Error === 'Series not found!') { + return []; + } + + throw Error(`MDB | Received error from ${this.apiName}: \n${JSON.stringify(data, undefined, 4)}`); + } + if (!data.results) { + return []; + } + + // console.debug(data.results); + + const ret: MediaTypeModel[] = []; + + for (const result of data.results) { + ret.push( + new SeriesModel({ + type: 'series', + title: result.original_name, + englishTitle: result.name, + year: result.first_air_date ? new Date(result.first_air_date).getFullYear().toString() : 'unknown', + dataSource: this.apiName, + id: result.id, + }), + ); + } + + return ret; + } + + async getById(id: string): Promise { + console.log(`MDB | api "${this.apiName}" queried by ID`); + + if (!this.plugin.settings.TMDBKey) { + throw Error(`MDB | API key for ${this.apiName} missing.`); + } + + const searchUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(id)}?api_key=${this.plugin.settings.TMDBKey}&append_to_response=credits`; + const fetchData = await fetch(searchUrl); + + if (fetchData.status === 401) { + throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); + } + if (fetchData.status !== 200) { + throw Error(`MDB | Received status code ${fetchData.status} from ${this.apiName}.`); + } + + const result = await fetchData.json(); + // console.debug(result); + + return new SeriesModel({ + type: 'series', + title: result.original_name, + englishTitle: result.name, + year: result.first_air_date ? new Date(result.first_air_date).getFullYear().toString() : 'unknown', + dataSource: this.apiName, + url: `https://www.themoviedb.org/tv/${result.id}`, + id: result.id, + + plot: result.overview ?? '', + genres: result.genres.map((g: any) => g.name) ?? [], + writer: result.created_by.map((c: any) => c.name) ?? [], + studio: result.production_companies.map((s: any) => s.name) ?? [], + episodes: result.number_of_episodes, + duration: result.episode_run_time[0] ?? 'unknown', + onlineRating: result.vote_average, + actors: result.credits.cast.map((c: any) => c.name).slice(0, 5) ?? [], + image: `https://image.tmdb.org/t/p/w780${result.poster_path}`, + + released: ['Returning Series', 'Cancelled', 'Ended'].includes(result.status), + streamingServices: [], + airing: ['Returning Series'].includes(result.status), + airedFrom: this.plugin.dateFormatter.format(result.first_air_date, this.apiDateFormat) ?? 'unknown', + airedTo: ['Returning Series'].includes(result.status) ? 'unknown' : (this.plugin.dateFormatter.format(result.last_air_date, this.apiDateFormat) ?? 'unknown'), + + userData: { + watched: false, + lastWatched: '', + personalRating: 0, + }, + }); + } + + getDisabledMediaTypes(): MediaType[] { + return this.plugin.settings.TMDBSeriesAPI_disabledMediaTypes as MediaType[]; + } +} diff --git a/src/main.ts b/src/main.ts index 4c69dc4..1fcadc5 100644 --- a/src/main.ts +++ b/src/main.ts @@ -13,6 +13,9 @@ import { MusicBrainzAPI } from './api/apis/MusicBrainzAPI'; import { OMDbAPI } from './api/apis/OMDbAPI'; import { OpenLibraryAPI } from './api/apis/OpenLibraryAPI'; import { SteamAPI } from './api/apis/SteamAPI'; +import { TMDBSeriesAPI } from './api/apis/TMDBSeriesAPI'; +import { TMDBSeasonAPI } from './api/apis/TMDBSeasonAPI'; +import { TMDBMovieAPI } from './api/apis/TMDBMovieAPI'; import { WikipediaAPI } from './api/apis/WikipediaAPI'; import { ConfirmOverwriteModal } from './modals/ConfirmOverwriteModal'; import type { MediaTypeModel } from './models/MediaTypeModel'; @@ -56,6 +59,9 @@ export default class MediaDbPlugin extends Plugin { this.apiManager.registerAPI(new WikipediaAPI(this)); this.apiManager.registerAPI(new MusicBrainzAPI(this)); this.apiManager.registerAPI(new SteamAPI(this)); + this.apiManager.registerAPI(new TMDBSeriesAPI(this)); + this.apiManager.registerAPI(new TMDBSeasonAPI(this)); + this.apiManager.registerAPI(new TMDBMovieAPI(this)); this.apiManager.registerAPI(new BoardGameGeekAPI(this)); this.apiManager.registerAPI(new OpenLibraryAPI(this)); this.apiManager.registerAPI(new ComicVineAPI(this)); diff --git a/src/models/SeasonModel.ts b/src/models/SeasonModel.ts new file mode 100644 index 0000000..ef5a20a --- /dev/null +++ b/src/models/SeasonModel.ts @@ -0,0 +1,80 @@ +import { MediaType } from '../utils/MediaType'; +import type { ModelToData } from '../utils/Utils'; +import { mediaDbTag, migrateObject } from '../utils/Utils'; +import { MediaTypeModel } from './MediaTypeModel'; + +export type SeasonData = ModelToData; + +export class SeasonModel extends MediaTypeModel { + seasonNumber: number; + seasonTitle: string; + episodes: number; + + plot: string; + genres: string[]; + writer: string[]; + studio: string[]; + duration: string; + onlineRating: number; + actors: string[]; + image: string; + + released: boolean; + streamingServices: string[]; + airing: boolean; + airedFrom: string; + airedTo: string; + + userData: { + watched: boolean; + lastWatched: string; + personalRating: number; + }; + + constructor(obj: SeasonData) { + super(); + this.seasonTitle = ''; + this.seasonNumber = 0; + this.episodes = 0; + this.plot = ''; + this.genres = []; + this.writer = []; + this.studio = []; + this.duration = ''; + this.onlineRating = 0; + this.actors = []; + this.image = ''; + + this.released = false; + this.streamingServices = []; + this.airing = false; + this.airedFrom = ''; + this.airedTo = ''; + + this.userData = { + watched: false, + lastWatched: '', + personalRating: 0, + }; + + migrateObject(this, obj, this); + + if (!obj.hasOwnProperty('userData')) { + migrateObject(this.userData, obj, this.userData); + } + + this.type = this.getMediaType(); + } + + getTags(): string[] { + return [mediaDbTag, 'tv', 'season']; + } + + getMediaType(): MediaType { + return MediaType.Season; + } + + getSummary(): string { + return 'Season ' + this.seasonNumber + '(' + this.year + ')'; + } +} diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index c7e5ac7..255f0b7 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -13,6 +13,7 @@ import { FolderSuggest } from './suggesters/FolderSuggest'; export interface MediaDbPluginSettings { OMDbKey: string; + TMDBKey: string; MobyGamesKey: string; GiantBombKey: string; ComicVineKey: string; @@ -23,6 +24,9 @@ export interface MediaDbPluginSettings { useDefaultFrontMatter: boolean; enableTemplaterIntegration: boolean; OMDbAPI_disabledMediaTypes: MediaType[]; + TMDBSeriesAPI_disabledMediaTypes: MediaType[]; + TMDBSeasonAPI_disabledMediaTypes: MediaType[]; + TMDBMovieAPI_disabledMediaTypes: MediaType[]; MALAPI_disabledMediaTypes: MediaType[]; MALAPIManga_disabledMediaTypes: MediaType[]; ComicVineAPI_disabledMediaTypes: MediaType[]; @@ -35,6 +39,7 @@ export interface MediaDbPluginSettings { OpenLibraryAPI_disabledMediaTypes: MediaType[]; movieTemplate: string; seriesTemplate: string; + seasonTemplate: string; mangaTemplate: string; gameTemplate: string; wikiTemplate: string; @@ -44,6 +49,7 @@ export interface MediaDbPluginSettings { movieFileNameTemplate: string; seriesFileNameTemplate: string; + seasonFileNameTemplate: string; mangaFileNameTemplate: string; gameFileNameTemplate: string; wikiFileNameTemplate: string; @@ -53,6 +59,7 @@ export interface MediaDbPluginSettings { moviePropertyConversionRules: string; seriesPropertyConversionRules: string; + seasonPropertyConversionRules: string; mangaPropertyConversionRules: string; gamePropertyConversionRules: string; wikiPropertyConversionRules: string; @@ -62,6 +69,7 @@ export interface MediaDbPluginSettings { movieFolder: string; seriesFolder: string; + seasonFolder: string; mangaFolder: string; gameFolder: string; wikiFolder: string; @@ -76,6 +84,7 @@ export interface MediaDbPluginSettings { const DEFAULT_SETTINGS: MediaDbPluginSettings = { OMDbKey: '', + TMDBKey: '', MobyGamesKey: '', GiantBombKey: '', ComicVineKey: '', @@ -86,6 +95,9 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = { useDefaultFrontMatter: true, enableTemplaterIntegration: false, OMDbAPI_disabledMediaTypes: [], + TMDBSeriesAPI_disabledMediaTypes: [], + TMDBSeasonAPI_disabledMediaTypes: [], + TMDBMovieAPI_disabledMediaTypes: [], MALAPI_disabledMediaTypes: [], MALAPIManga_disabledMediaTypes: [], ComicVineAPI_disabledMediaTypes: [], @@ -98,6 +110,7 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = { OpenLibraryAPI_disabledMediaTypes: [], movieTemplate: '', seriesTemplate: '', + seasonTemplate: '', mangaTemplate: '', gameTemplate: '', wikiTemplate: '', @@ -107,6 +120,7 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = { movieFileNameTemplate: '{{ title }} ({{ year }})', seriesFileNameTemplate: '{{ title }} ({{ year }})', + seasonFileNameTemplate: '{{ title }} ({{ year }})', mangaFileNameTemplate: '{{ title }} ({{ year }})', gameFileNameTemplate: '{{ title }} ({{ year }})', wikiFileNameTemplate: '{{ title }}', @@ -116,6 +130,7 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = { moviePropertyConversionRules: '', seriesPropertyConversionRules: '', + seasonPropertyConversionRules: '', mangaPropertyConversionRules: '', gamePropertyConversionRules: '', wikiPropertyConversionRules: '', @@ -125,6 +140,7 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = { movieFolder: 'Media DB/movies', seriesFolder: 'Media DB/series', + seasonFolder: 'Media DB/series', mangaFolder: 'Media DB/comics', gameFolder: 'Media DB/games', wikiFolder: 'Media DB/wiki', @@ -396,6 +412,19 @@ export class MediaDbSettingTab extends PluginSettingTab { }); }); + new Setting(containerEl) + .setName('Season folder') + .setDesc('Where newly imported seasons should be placed.') + .addSearch(cb => { + new FolderSuggest(this.app, cb.inputEl); + cb.setPlaceholder(DEFAULT_SETTINGS.seasonFolder) + .setValue(this.plugin.settings.seriesFolder) + .onChange(data => { + this.plugin.settings.seasonFolder = data; + void this.plugin.saveSettings(); + }); + }); + new Setting(containerEl) .setName('Comic and manga folder') .setDesc('Where newly imported comics and manga should be placed.') @@ -503,6 +532,19 @@ export class MediaDbSettingTab extends PluginSettingTab { }); }); + new Setting(containerEl) + .setName('Season template') + .setDesc('Template file to be used when creating a new note for a season.') + .addSearch(cb => { + new FileSuggest(this.app, cb.inputEl); + cb.setPlaceholder('Example: seasonTemplate.md') + .setValue(this.plugin.settings.seasonTemplate) + .onChange(data => { + this.plugin.settings.seasonTemplate = data; + void this.plugin.saveSettings(); + }); + }); + new Setting(containerEl) .setName('Manga and Comics template') .setDesc('Template file to be used when creating a new note for a manga or a comic.') @@ -609,6 +651,18 @@ export class MediaDbSettingTab extends PluginSettingTab { }); }); + new Setting(containerEl) + .setName('Season file name template') + .setDesc('Template for the file name used when creating a new note for a season.') + .addText(cb => { + cb.setPlaceholder(`Example: ${DEFAULT_SETTINGS.seasonFileNameTemplate}`) + .setValue(this.plugin.settings.seasonFileNameTemplate) + .onChange(data => { + this.plugin.settings.seasonFileNameTemplate = data; + void this.plugin.saveSettings(); + }); + }); + new Setting(containerEl) .setName('Manga and comic file name template') .setDesc('Template for the file name used when creating a new note for a manga or comic.') diff --git a/src/utils/MediaType.ts b/src/utils/MediaType.ts index 02d1c2c..857050f 100644 --- a/src/utils/MediaType.ts +++ b/src/utils/MediaType.ts @@ -1,6 +1,7 @@ export enum MediaType { Movie = 'movie', Series = 'series', + Season = 'season', ComicManga = 'comicManga', Game = 'game', MusicRelease = 'musicRelease', diff --git a/src/utils/MediaTypeManager.ts b/src/utils/MediaTypeManager.ts index 6f60c3b..b9e1419 100644 --- a/src/utils/MediaTypeManager.ts +++ b/src/utils/MediaTypeManager.ts @@ -8,6 +8,7 @@ import type { MediaTypeModel } from '../models/MediaTypeModel'; import { MovieModel } from '../models/MovieModel'; import { MusicReleaseModel } from '../models/MusicReleaseModel'; import { SeriesModel } from '../models/SeriesModel'; +import { SeasonModel } from '../models/SeasonModel'; import { WikiModel } from '../models/WikiModel'; import type { MediaDbPluginSettings } from '../settings/Settings'; import { ILLEGAL_FILENAME_CHARACTERS } from './IllegalFilenameCharactersList'; @@ -17,6 +18,7 @@ import { replaceTags } from './Utils'; export const MEDIA_TYPES: MediaType[] = [ MediaType.Movie, MediaType.Series, + MediaType.Season, MediaType.ComicManga, MediaType.Game, MediaType.Wiki, @@ -40,6 +42,7 @@ export class MediaTypeManager { this.mediaFileNameTemplateMap = new Map(); this.mediaFileNameTemplateMap.set(MediaType.Movie, settings.movieFileNameTemplate); this.mediaFileNameTemplateMap.set(MediaType.Series, settings.seriesFileNameTemplate); + this.mediaFileNameTemplateMap.set(MediaType.Season, settings.seasonFileNameTemplate); this.mediaFileNameTemplateMap.set(MediaType.ComicManga, settings.mangaFileNameTemplate); this.mediaFileNameTemplateMap.set(MediaType.Game, settings.gameFileNameTemplate); this.mediaFileNameTemplateMap.set(MediaType.Wiki, settings.wikiFileNameTemplate); @@ -50,6 +53,7 @@ export class MediaTypeManager { this.mediaTemplateMap = new Map(); this.mediaTemplateMap.set(MediaType.Movie, settings.movieTemplate); this.mediaTemplateMap.set(MediaType.Series, settings.seriesTemplate); + this.mediaTemplateMap.set(MediaType.Season, settings.seasonTemplate); this.mediaTemplateMap.set(MediaType.ComicManga, settings.mangaTemplate); this.mediaTemplateMap.set(MediaType.Game, settings.gameTemplate); this.mediaTemplateMap.set(MediaType.Wiki, settings.wikiTemplate); @@ -62,6 +66,7 @@ export class MediaTypeManager { this.mediaFolderMap = new Map(); this.mediaFolderMap.set(MediaType.Movie, settings.movieFolder); this.mediaFolderMap.set(MediaType.Series, settings.seriesFolder); + this.mediaFolderMap.set(MediaType.Season, settings.seasonFolder); this.mediaFolderMap.set(MediaType.ComicManga, settings.mangaFolder); this.mediaFolderMap.set(MediaType.Game, settings.gameFolder); this.mediaFolderMap.set(MediaType.Wiki, settings.wikiFolder); @@ -138,6 +143,8 @@ export class MediaTypeManager { return new MovieModel(obj); } else if (mediaType === MediaType.Series) { return new SeriesModel(obj); + } else if (mediaType === MediaType.Season) { + return new SeasonModel(obj); } else if (mediaType === MediaType.ComicManga) { return new ComicMangaModel(obj); } else if (mediaType === MediaType.Game) { From 06e8cfa06e57fb45e1a4dfc075cb039890292e84 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Sun, 19 Oct 2025 14:31:49 +0200 Subject: [PATCH 02/14] Refactor TMDBSeasonAPI + added extra metadata Refactored TMDBSeasonAPI to improve API calls and data handling. I also added metadata from the main series that is missing in the season details (actors, writers, genre,...) this might be inaccurate for some seasons however but there's no other option --- src/api/apis/TMDBSeasonAPI.ts | 94 ++++++++++++++++++++++------------- 1 file changed, 59 insertions(+), 35 deletions(-) diff --git a/src/api/apis/TMDBSeasonAPI.ts b/src/api/apis/TMDBSeasonAPI.ts index dab2fc2..4db5105 100644 --- a/src/api/apis/TMDBSeasonAPI.ts +++ b/src/api/apis/TMDBSeasonAPI.ts @@ -28,7 +28,6 @@ export class TMDBSeasonAPI extends APIModel { throw new Error(`MDB | API key for ${this.apiName} missing.`); } - // 1) Search for series const searchUrl = `https://api.themoviedb.org/3/search/tv?api_key=${this.plugin.settings.TMDBKey}&query=${encodeURIComponent(title)}&include_adult=${this.plugin.settings.sfwFilter ? 'false' : 'true'}`; const searchResp = await fetch(searchUrl); @@ -40,57 +39,65 @@ export class TMDBSeasonAPI extends APIModel { } const searchData = await searchResp.json(); - - if (searchData.total_results === 0 || !searchData.results) { + if (!searchData.results || searchData.total_results === 0) { return []; } const ret: MediaTypeModel[] = []; - // 2) For each series result, fetch its seasons and flatten into SeasonModel entries (cap total to 20) - for (const series of searchData.results) { + for (const result of searchData.results) { if (ret.length >= 20) break; - const tvId = series.id; - const seriesUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}?api_key=${this.plugin.settings.TMDBKey}`; - const tvResp = await fetch(seriesUrl); + const tvId = result.id; + const seriesUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}?api_key=${this.plugin.settings.TMDBKey}&append_to_response=credits`; + const seriesResp = await fetch(seriesUrl); - if (tvResp.status === 401) { + if (seriesResp.status === 401) { throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); } - if (tvResp.status !== 200) { - // Skip this series if it fails; do not abort the whole search - console.warn(`MDB | Skipping series ${tvId} due to status ${tvResp.status}`); + if (seriesResp.status !== 200) { + console.warn(`MDB | Skipping series ${tvId} due to status ${seriesResp.status}`); continue; } - const tvData = await tvResp.json(); - const seriesName = tvData?.name ?? series?.name ?? series?.original_name ?? ''; + const seriesData = await seriesResp.json(); + const seriesName = seriesData?.name ?? result?.name ?? result?.original_name ?? ''; - if (Array.isArray(tvData?.seasons)) { - for (const season of tvData.seasons) { + if (Array.isArray(seriesData?.seasons)) { + for (const season of seriesData.seasons) { if (ret.length >= 20) break; - // Some seasons (e.g., specials) may have limited metadata; handle gracefully const seasonNumber = season.season_number ?? 0; - const airDate = season.air_date ?? ''; + const seasonDetailsUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}/season/${encodeURIComponent(seasonNumber)}?api_key=${this.plugin.settings.TMDBKey}`; + const seasonDetailsResp = await fetch(seasonDetailsUrl); + + if (seasonDetailsResp.status === 401) { + throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); + } + if (seasonDetailsResp.status !== 200) { + console.warn(`MDB | Skipping season ${tvId}/season/${seasonNumber} due to status ${seasonDetailsResp.status}`); + continue; + } + + const seasonData = await seasonDetailsResp.json(); + + // Get airedTo as the air_date of the last episode, if available + let airedTo = 'unknown'; + if (Array.isArray(seasonData.episodes) && seasonData.episodes.length > 0) { + const lastEp = seasonData.episodes[seasonData.episodes.length - 1]; + if (lastEp?.air_date) airedTo = lastEp.air_date; + } + const titleText = `${seriesName} - Season ${seasonNumber}`; ret.push( new SeasonModel({ - // SeasonModel constructor sets type to MediaType.Series internally title: titleText, englishTitle: titleText, - year: airDate ? new Date(airDate).getFullYear().toString() : 'unknown', + year: seasonData.air_date ? new Date(seasonData.air_date).getFullYear().toString() : 'unknown', dataSource: this.apiName, - id: `${tvId}-S${seasonNumber}`, - seasonTitle: season.name ?? titleText, + id: `${tvId}/season/${seasonNumber}`, + seasonTitle: seasonData.name ?? titleText, seasonNumber: seasonNumber, - episodes: season.episode_count ?? 0, - airedFrom: this.plugin.dateFormatter.format(airDate, this.apiDateFormat) ?? 'unknown', - airedTo: 'unknown', - plot: season.overview ?? '', - image: season.poster_path ? `https://image.tmdb.org/t/p/w780${season.poster_path}` : '', - userData: { watched: false, lastWatched: '', personalRating: 0 }, }), ); } @@ -107,10 +114,10 @@ export class TMDBSeasonAPI extends APIModel { throw Error(`MDB | API key for ${this.apiName} missing.`); } - // Expect season ids like "12345-S2" - const m = /^(\d+)-S(\d+)$/.exec(id); + // Expect season ids like "12345/season/2" + const m = /^(\d+)\/season\/(\d+)$/.exec(id); if (!m) { - throw Error(`MDB | Invalid season id "${id}". Expected format "-S".`); + throw Error(`MDB | Invalid season id "${id}". Expected format "/season/".`); } const tvId = m[1]; @@ -128,8 +135,8 @@ export class TMDBSeasonAPI extends APIModel { const seasonData = await seasonResp.json(); - // Fetch parent series to build consistent titles - const seriesUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}?api_key=${this.plugin.settings.TMDBKey}`; + // Fetch parent series to build consistent titles and inherit fields + const seriesUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}?api_key=${this.plugin.settings.TMDBKey}&append_to_response=credits`; const seriesResp = await fetch(seriesUrl); if (seriesResp.status === 401) { @@ -145,19 +152,36 @@ export class TMDBSeasonAPI extends APIModel { const airDate = seasonData.air_date ?? ''; const titleText = `${seriesName} - Season ${seasonData.season_number}`; + // Get airedTo as the air_date of the last episode, if available + let airedTo = 'unknown'; + if (Array.isArray(seasonData.episodes) && seasonData.episodes.length > 0) { + const lastEp = seasonData.episodes[seasonData.episodes.length - 1]; + if (lastEp?.air_date) airedTo = lastEp.air_date; + } + return new SeasonModel({ title: titleText, englishTitle: titleText, year: airDate ? new Date(airDate).getFullYear().toString() : 'unknown', dataSource: this.apiName, - id: `${tvId}-S${seasonData.season_number}`, + url: `https://www.themoviedb.org/tv/${tvId}/season/${seasonData.season_number}`, + id: `${tvId}/season/${seasonData.season_number}`, seasonTitle: seasonData.name ?? titleText, seasonNumber: seasonData.season_number ?? Number(seasonNumber), episodes: Array.isArray(seasonData.episodes) ? seasonData.episodes.length : (seasonData.episodes ?? 0), airedFrom: this.plugin.dateFormatter.format(airDate, this.apiDateFormat) ?? 'unknown', - airedTo: 'unknown', + airedTo: airedTo, plot: seasonData.overview ?? '', image: seasonData.poster_path ? `https://image.tmdb.org/t/p/w780${seasonData.poster_path}` : '', + genres: seriesData.genres?.map((g: any) => g.name) ?? [], + writer: seriesData.created_by?.map((c: any) => c.name) ?? [], + studio: seriesData.production_companies?.map((s: any) => s.name) ?? [], + duration: seriesData.episode_run_time?.[0]?.toString() ?? '', + onlineRating: seasonData.vote_average ?? 0, + actors: seriesData.credits?.cast?.map((c: any) => c.name).slice(0, 5) ?? [], + released: ['Returning Series', 'Cancelled', 'Ended'].includes(seriesData.status), + streamingServices: [], + airing: ['Returning Series'].includes(seriesData.status), userData: { watched: false, lastWatched: '', personalRating: 0 }, }); } From 23b5ee0ef9212282e2990c368bed2bb238065f44 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Sun, 19 Oct 2025 14:33:07 +0200 Subject: [PATCH 03/14] Add meta.txt to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index af90ec9..2c3c4af 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,4 @@ exampleVault/.obsidian/plugins/obsidian-media-db-plugin/* !exampleVault/.obsidian/plugins/obsidian-media-db-plugin/.hotreload exampleVault/Media DB/* +meta.txt From 0e729e59d31d317141d3955f92f461c398452a00 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Sat, 25 Oct 2025 14:16:13 +0200 Subject: [PATCH 04/14] Handle potentially missing fields for OpenLibraryAPI --- src/api/apis/OpenLibraryAPI.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/api/apis/OpenLibraryAPI.ts b/src/api/apis/OpenLibraryAPI.ts index c39faa5..e3590a0 100644 --- a/src/api/apis/OpenLibraryAPI.ts +++ b/src/api/apis/OpenLibraryAPI.ts @@ -66,10 +66,10 @@ export class OpenLibraryAPI extends APIModel { new BookModel({ title: result.title, englishTitle: result.title, - year: result.first_publish_year.toString(), + year: result.first_publish_year?.toString() ?? 'unknown', dataSource: this.apiName, id: result.key, - author: result.author_name.join(', '), + author: result.author_name?.join(', '), }), ); } @@ -111,7 +111,7 @@ export class OpenLibraryAPI extends APIModel { return new BookModel({ title: result.title, - year: result.first_publish_year.toString(), + year: result.first_publish_year?.toString() ?? 'unknown', dataSource: this.apiName, url: `https://openlibrary.org` + result.key, id: result.key, @@ -119,7 +119,7 @@ export class OpenLibraryAPI extends APIModel { isbn13: Number.isNaN(isbn13) ? undefined : isbn13, englishTitle: result.title, - author: result.author_name.join(', '), + author: result.author_name?.join(', '), pages: Number.isNaN(pages) ? undefined : pages, onlineRating: result.ratings_average, image: result.cover_edition_key ? `https://covers.openlibrary.org/b/OLID/` + result.cover_edition_key + `-L.jpg` : undefined, From 18af97a4c687bd088913971cef49f7f9b0ec20bd Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Sat, 25 Oct 2025 17:30:12 +0200 Subject: [PATCH 05/14] Added season selection modal to improve TMDB season handling You can now search for a series, select it and it'll list all the seasons for that series. With the new modal you can then select the seasons you want to add. --- src/api/apis/TMDBSeasonAPI.ts | 109 +++++++++++++------------ src/main.ts | 61 +++++++++++++- src/modals/MediaDbSeasonSelectModal.ts | 47 +++++++++++ src/models/SeasonModel.ts | 2 +- src/utils/SeasonModalHelper.ts | 16 ++++ 5 files changed, 178 insertions(+), 57 deletions(-) create mode 100644 src/modals/MediaDbSeasonSelectModal.ts create mode 100644 src/utils/SeasonModalHelper.ts diff --git a/src/api/apis/TMDBSeasonAPI.ts b/src/api/apis/TMDBSeasonAPI.ts index 4db5105..d0ea90f 100644 --- a/src/api/apis/TMDBSeasonAPI.ts +++ b/src/api/apis/TMDBSeasonAPI.ts @@ -48,65 +48,70 @@ export class TMDBSeasonAPI extends APIModel { for (const result of searchData.results) { if (ret.length >= 20) break; - const tvId = result.id; - const seriesUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}?api_key=${this.plugin.settings.TMDBKey}&append_to_response=credits`; - const seriesResp = await fetch(seriesUrl); - - if (seriesResp.status === 401) { - throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); - } - if (seriesResp.status !== 200) { - console.warn(`MDB | Skipping series ${tvId} due to status ${seriesResp.status}`); - continue; - } - - const seriesData = await seriesResp.json(); - const seriesName = seriesData?.name ?? result?.name ?? result?.original_name ?? ''; - - if (Array.isArray(seriesData?.seasons)) { - for (const season of seriesData.seasons) { - if (ret.length >= 20) break; - - const seasonNumber = season.season_number ?? 0; - const seasonDetailsUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}/season/${encodeURIComponent(seasonNumber)}?api_key=${this.plugin.settings.TMDBKey}`; - const seasonDetailsResp = await fetch(seasonDetailsUrl); - - if (seasonDetailsResp.status === 401) { - throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); + // Fetch series details to get the total number of seasons + let totalSeasons = 0; + try { + const detailsUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(result.id)}?api_key=${this.plugin.settings.TMDBKey}`; + const detailsResp = await fetch(detailsUrl); + if (detailsResp.status === 200) { + const detailsData = await detailsResp.json(); + if (Array.isArray(detailsData.seasons)) { + totalSeasons = detailsData.seasons.length; } - if (seasonDetailsResp.status !== 200) { - console.warn(`MDB | Skipping season ${tvId}/season/${seasonNumber} due to status ${seasonDetailsResp.status}`); - continue; - } - - const seasonData = await seasonDetailsResp.json(); - - // Get airedTo as the air_date of the last episode, if available - let airedTo = 'unknown'; - if (Array.isArray(seasonData.episodes) && seasonData.episodes.length > 0) { - const lastEp = seasonData.episodes[seasonData.episodes.length - 1]; - if (lastEp?.air_date) airedTo = lastEp.air_date; - } - - const titleText = `${seriesName} - Season ${seasonNumber}`; - ret.push( - new SeasonModel({ - title: titleText, - englishTitle: titleText, - year: seasonData.air_date ? new Date(seasonData.air_date).getFullYear().toString() : 'unknown', - dataSource: this.apiName, - id: `${tvId}/season/${seasonNumber}`, - seasonTitle: seasonData.name ?? titleText, - seasonNumber: seasonNumber, - }), - ); } - } + } catch {} + ret.push( + new SeasonModel({ + title: `${result.name ?? result.original_name ?? ''}`, + englishTitle: result.name ?? result.original_name ?? '', + year: result.first_air_date ? new Date(result.first_air_date).getFullYear().toString() : 'unknown', + dataSource: this.apiName, + id: result.id.toString(), + seasonTitle: result.name ?? result.original_name ?? '', + seasonNumber: totalSeasons, + }) + ); } return ret; } + //Fetch all seasons for a given series + async getSeasonsForSeries(tvId: string): Promise { + if (!this.plugin.settings.TMDBKey) { + throw new Error(`MDB | API key for ${this.apiName} missing.`); + } + const seriesUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}?api_key=${this.plugin.settings.TMDBKey}`; + const seriesResp = await fetch(seriesUrl); + if (seriesResp.status === 401) { + throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); + } + if (seriesResp.status !== 200) { + throw Error(`MDB | Received status code ${seriesResp.status} from ${this.apiName}.`); + } + const seriesData = await seriesResp.json(); + const seriesName = seriesData?.name ?? ''; + const ret: SeasonModel[] = []; + if (Array.isArray(seriesData?.seasons)) { + for (const season of seriesData.seasons) { + const seasonNumber = season.season_number ?? 0; + const titleText = `${seriesName} - Season ${seasonNumber}`; + ret.push( + new SeasonModel({ + title: titleText, + englishTitle: titleText, + year: season.air_date ? new Date(season.air_date).getFullYear().toString() : 'unknown', + dataSource: this.apiName, + id: `${tvId}/season/${seasonNumber}`, + seasonTitle: season.name ?? titleText, + seasonNumber: seasonNumber, + }) + ); + } + } + return ret; + } + async getById(id: string): Promise { console.log(`MDB | api "${this.apiName}" queried by ID`); diff --git a/src/main.ts b/src/main.ts index 1fcadc5..ffb6ed7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -218,14 +218,67 @@ export default class MediaDbPlugin extends Plugin { const proceed: boolean = false; while (!proceed) { - selectResults = - (await this.modalHelper.openSelectModal({ elements: apiSearchResults }, async selectModalData => { - return await this.queryDetails(selectModalData.selected); - })) ?? []; + if (types.length === 1 && types[0] === 'season') { + selectResults = + (await this.modalHelper.openSelectModal({ elements: apiSearchResults }, async selectModalData => { + return selectModalData.selected; + })) ?? []; + } else { + selectResults = + (await this.modalHelper.openSelectModal({ elements: apiSearchResults }, async selectModalData => { + return await this.queryDetails(selectModalData.selected); + })) ?? []; + } if (!selectResults || selectResults.length < 1) { return; } + // Only show the season select modal if the user searches for seasons + if (types.length === 1 && types[0] === 'season' && selectResults.length === 1 && selectResults[0].dataSource === 'TMDBSeasonAPI') { + // Dynamically import the modal + const { MediaDbSeasonSelectModal } = await import('./modals/MediaDbSeasonSelectModal'); + const TMDBSeasonAPI = this.apiManager.getApiByName('TMDBSeasonAPI') as import('./api/apis/TMDBSeasonAPI').TMDBSeasonAPI; + if (!TMDBSeasonAPI) { + new Notice('TMDBSeasonAPI not found.'); + return; + } + // Fetch all seasons for the selected series + const allSeasons = await TMDBSeasonAPI.getSeasonsForSeries(selectResults[0].id); + if (!allSeasons || allSeasons.length === 0) { + new Notice('No seasons found for this series.'); + return; + } + const modal = new MediaDbSeasonSelectModal(this, allSeasons.map(s => ({ + season_number: s.seasonNumber, + name: s.seasonTitle || s.title, + episode_count: s.episodes || 0, + air_date: s.year, + poster_path: s.image, + })), true); + const selectedSeasons: any[] = await new Promise(resolve => { + modal.setSubmitCallback(resolve); + modal.open(); + }); + if (!selectedSeasons || selectedSeasons.length === 0) { + return; + } + // Fetch full metadata for each selected seasond and create the note + await Promise.all(selectedSeasons.map(async season => { + const orig = allSeasons.find(s => s.seasonNumber === season.season_number); + if (orig) { + // Fetch full metadata using getById + const TMDBSeasonAPI = this.apiManager.getApiByName('TMDBSeasonAPI') as import('./api/apis/TMDBSeasonAPI').TMDBSeasonAPI; + if (TMDBSeasonAPI) { + const fullMeta = await TMDBSeasonAPI.getById(orig.id); + await this.createMediaDbNotes([fullMeta]); + } else { + await this.createMediaDbNotes([orig]); + } + } + })); + return; + } + const confirmed = await this.modalHelper.openPreviewModal({ elements: selectResults }, async previewModalData => { return previewModalData.confirmed; }); diff --git a/src/modals/MediaDbSeasonSelectModal.ts b/src/modals/MediaDbSeasonSelectModal.ts new file mode 100644 index 0000000..2490e67 --- /dev/null +++ b/src/modals/MediaDbSeasonSelectModal.ts @@ -0,0 +1,47 @@ +import type MediaDbPlugin from '../main'; +import { SelectModal } from './SelectModal'; + +export interface SeasonSelectModalElement { + season_number: number; + name: string; + air_date?: string; + poster_path?: string; +} + +export class MediaDbSeasonSelectModal extends SelectModal { + plugin: MediaDbPlugin; + submitCallback?: (selectedSeasons: SeasonSelectModalElement[]) => void; + closeCallback?: (err?: Error) => void; + + constructor(plugin: MediaDbPlugin, seasons: SeasonSelectModalElement[], multiSelect = true) { + super(plugin.app, seasons, multiSelect); + this.plugin = plugin; + this.title = 'Select Season(s)'; + this.description = 'Select one or more seasons to create notes for.'; + } + + renderElement(season: SeasonSelectModalElement, el: HTMLElement): void { + el.createEl('div', { text: `${season.name}` }); + if (season.air_date) { + el.createEl('small', { text: `Air date: ${season.air_date}` }); + } + } + + submit(): void { + const selected = this.selectModalElements.filter(x => x.isActive()).map(x => x.value); + this.submitCallback?.(selected); + this.close(); + } + + skip(): void { + this.close(); + } + + setSubmitCallback(cb: (selectedSeasons: SeasonSelectModalElement[]) => void): void { + this.submitCallback = cb; + } + + setCloseCallback(cb: (err?: Error) => void): void { + this.closeCallback = cb; + } +} diff --git a/src/models/SeasonModel.ts b/src/models/SeasonModel.ts index ef5a20a..07f9626 100644 --- a/src/models/SeasonModel.ts +++ b/src/models/SeasonModel.ts @@ -75,6 +75,6 @@ export class SeasonModel extends MediaTypeModel { } getSummary(): string { - return 'Season ' + this.seasonNumber + '(' + this.year + ')'; + return this.seasonNumber + ' seasons'; } } diff --git a/src/utils/SeasonModalHelper.ts b/src/utils/SeasonModalHelper.ts new file mode 100644 index 0000000..93002df --- /dev/null +++ b/src/utils/SeasonModalHelper.ts @@ -0,0 +1,16 @@ +import type { App } from 'obsidian'; +import type { SeasonSelectModalElement } from '../modals/MediaDbSeasonSelectModal'; +import { MediaDbSeasonSelectModal } from '../modals/MediaDbSeasonSelectModal'; + +export async function openSeasonSelectModal(app: App, plugin: any, seasons: SeasonSelectModalElement[]): Promise { + return new Promise(resolve => { + const modal = new MediaDbSeasonSelectModal(plugin, seasons, true); + modal.setSubmitCallback(selected => { + resolve(selected); + }); + modal.setCloseCallback(() => { + resolve(undefined); + }); + modal.open(); + }); +} From 3686a0175d88d37d0f0d3aa67ab5aad1809700e3 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Sat, 25 Oct 2025 17:41:38 +0200 Subject: [PATCH 06/14] Added series title in the season selection modal --- src/main.ts | 4 +++- src/modals/MediaDbSeasonSelectModal.ts | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main.ts b/src/main.ts index ffb6ed7..323d00c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -248,13 +248,15 @@ export default class MediaDbPlugin extends Plugin { new Notice('No seasons found for this series.'); return; } + // Pass the original series title from the search result + const seriesName = selectResults[0]?.englishTitle || selectResults[0]?.title || ''; const modal = new MediaDbSeasonSelectModal(this, allSeasons.map(s => ({ season_number: s.seasonNumber, name: s.seasonTitle || s.title, episode_count: s.episodes || 0, air_date: s.year, poster_path: s.image, - })), true); + })), true, seriesName); const selectedSeasons: any[] = await new Promise(resolve => { modal.setSubmitCallback(resolve); modal.open(); diff --git a/src/modals/MediaDbSeasonSelectModal.ts b/src/modals/MediaDbSeasonSelectModal.ts index 2490e67..1bde2d7 100644 --- a/src/modals/MediaDbSeasonSelectModal.ts +++ b/src/modals/MediaDbSeasonSelectModal.ts @@ -12,11 +12,13 @@ export class MediaDbSeasonSelectModal extends SelectModal void; closeCallback?: (err?: Error) => void; + seriesName?: string; - constructor(plugin: MediaDbPlugin, seasons: SeasonSelectModalElement[], multiSelect = true) { + constructor(plugin: MediaDbPlugin, seasons: SeasonSelectModalElement[], multiSelect = true, seriesName?: string) { super(plugin.app, seasons, multiSelect); this.plugin = plugin; - this.title = 'Select Season(s)'; + this.seriesName = seriesName; + this.title = `Select Season(s) for${seriesName ? `: ${seriesName}` : ''}`; this.description = 'Select one or more seasons to create notes for.'; } From 35ea3cbb221784cc7621fdd8056eb2b022f4e8f3 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Tue, 9 Dec 2025 21:16:53 +0100 Subject: [PATCH 07/14] Ran prettier --- src/api/apis/TMDBSeasonAPI.ts | 4 ++-- src/main.ts | 45 ++++++++++++++++++++--------------- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/api/apis/TMDBSeasonAPI.ts b/src/api/apis/TMDBSeasonAPI.ts index d0ea90f..033d2c3 100644 --- a/src/api/apis/TMDBSeasonAPI.ts +++ b/src/api/apis/TMDBSeasonAPI.ts @@ -69,7 +69,7 @@ export class TMDBSeasonAPI extends APIModel { id: result.id.toString(), seasonTitle: result.name ?? result.original_name ?? '', seasonNumber: totalSeasons, - }) + }), ); } @@ -105,7 +105,7 @@ export class TMDBSeasonAPI extends APIModel { id: `${tvId}/season/${seasonNumber}`, seasonTitle: season.name ?? titleText, seasonNumber: seasonNumber, - }) + }), ); } } diff --git a/src/main.ts b/src/main.ts index 323d00c..9be9faa 100644 --- a/src/main.ts +++ b/src/main.ts @@ -250,13 +250,18 @@ export default class MediaDbPlugin extends Plugin { } // Pass the original series title from the search result const seriesName = selectResults[0]?.englishTitle || selectResults[0]?.title || ''; - const modal = new MediaDbSeasonSelectModal(this, allSeasons.map(s => ({ - season_number: s.seasonNumber, - name: s.seasonTitle || s.title, - episode_count: s.episodes || 0, - air_date: s.year, - poster_path: s.image, - })), true, seriesName); + const modal = new MediaDbSeasonSelectModal( + this, + allSeasons.map(s => ({ + season_number: s.seasonNumber, + name: s.seasonTitle || s.title, + episode_count: s.episodes || 0, + air_date: s.year, + poster_path: s.image, + })), + true, + seriesName, + ); const selectedSeasons: any[] = await new Promise(resolve => { modal.setSubmitCallback(resolve); modal.open(); @@ -265,19 +270,21 @@ export default class MediaDbPlugin extends Plugin { return; } // Fetch full metadata for each selected seasond and create the note - await Promise.all(selectedSeasons.map(async season => { - const orig = allSeasons.find(s => s.seasonNumber === season.season_number); - if (orig) { - // Fetch full metadata using getById - const TMDBSeasonAPI = this.apiManager.getApiByName('TMDBSeasonAPI') as import('./api/apis/TMDBSeasonAPI').TMDBSeasonAPI; - if (TMDBSeasonAPI) { - const fullMeta = await TMDBSeasonAPI.getById(orig.id); - await this.createMediaDbNotes([fullMeta]); - } else { - await this.createMediaDbNotes([orig]); + await Promise.all( + selectedSeasons.map(async season => { + const orig = allSeasons.find(s => s.seasonNumber === season.season_number); + if (orig) { + // Fetch full metadata using getById + const TMDBSeasonAPI = this.apiManager.getApiByName('TMDBSeasonAPI') as import('./api/apis/TMDBSeasonAPI').TMDBSeasonAPI; + if (TMDBSeasonAPI) { + const fullMeta = await TMDBSeasonAPI.getById(orig.id); + await this.createMediaDbNotes([fullMeta]); + } else { + await this.createMediaDbNotes([orig]); + } } - } - })); + }), + ); return; } From 64e79265b8037a5f0df80253e99af6305767eee0 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Tue, 30 Dec 2025 15:59:53 +0100 Subject: [PATCH 08/14] Added Open API response types --- src/api/apis/TMDBSeasonAPI.ts | 70 +++++++++++++++++++++++++++++++---- 1 file changed, 63 insertions(+), 7 deletions(-) diff --git a/src/api/apis/TMDBSeasonAPI.ts b/src/api/apis/TMDBSeasonAPI.ts index 033d2c3..58e2437 100644 --- a/src/api/apis/TMDBSeasonAPI.ts +++ b/src/api/apis/TMDBSeasonAPI.ts @@ -5,6 +5,62 @@ import { MediaType } from '../../utils/MediaType'; import { APIModel } from '../APIModel'; import { SeasonModel } from '../../models/SeasonModel'; +interface TMDBSearchTVResult { + id: number; + name?: string; + original_name?: string; + first_air_date?: string; +} + +interface TMDBSearchTVResponse { + page: number; + results: TMDBSearchTVResult[]; + total_results: number; + total_pages: number; +} + +interface TMDBSeason { + season_number: number; + name?: string; + air_date?: string; + episodes?: TMDBEpisode[]; + overview?: string; + poster_path?: string; + vote_average?: number; +} + +interface TMDBEpisode { + air_date?: string; + episode_number?: number; + name?: string; + overview?: string; +} + +interface TMDBSeriesDetails { + id: number; + name?: string; + seasons?: TMDBSeason[]; + genres?: { id: number; name: string }[]; + created_by?: { id: number; name: string }[]; + production_companies?: { id: number; name: string }[]; + episode_run_time?: number[]; + status?: string; + credits?: { + cast?: { name: string }[]; + }; +} + +interface TMDBSeasonDetails { + id: number; + season_number: number; + name?: string; + air_date?: string; + episodes?: TMDBEpisode[]; + overview?: string; + poster_path?: string; + vote_average?: number; +} + export class TMDBSeasonAPI extends APIModel { plugin: MediaDbPlugin; typeMappings: Map; @@ -38,7 +94,7 @@ export class TMDBSeasonAPI extends APIModel { throw Error(`MDB | Received status code ${searchResp.status} from ${this.apiName}.`); } - const searchData = await searchResp.json(); + const searchData = (await searchResp.json()) as TMDBSearchTVResponse; if (!searchData.results || searchData.total_results === 0) { return []; } @@ -54,7 +110,7 @@ export class TMDBSeasonAPI extends APIModel { const detailsUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(result.id)}?api_key=${this.plugin.settings.TMDBKey}`; const detailsResp = await fetch(detailsUrl); if (detailsResp.status === 200) { - const detailsData = await detailsResp.json(); + const detailsData = (await detailsResp.json()) as TMDBSeriesDetails; if (Array.isArray(detailsData.seasons)) { totalSeasons = detailsData.seasons.length; } @@ -89,7 +145,7 @@ export class TMDBSeasonAPI extends APIModel { if (seriesResp.status !== 200) { throw Error(`MDB | Received status code ${seriesResp.status} from ${this.apiName}.`); } - const seriesData = await seriesResp.json(); + const seriesData = (await seriesResp.json()) as TMDBSeriesDetails; const seriesName = seriesData?.name ?? ''; const ret: SeasonModel[] = []; if (Array.isArray(seriesData?.seasons)) { @@ -138,7 +194,7 @@ export class TMDBSeasonAPI extends APIModel { throw Error(`MDB | Received status code ${seasonResp.status} from ${this.apiName}.`); } - const seasonData = await seasonResp.json(); + const seasonData = (await seasonResp.json()) as TMDBSeasonDetails; // Fetch parent series to build consistent titles and inherit fields const seriesUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}?api_key=${this.plugin.settings.TMDBKey}&append_to_response=credits`; @@ -151,7 +207,7 @@ export class TMDBSeasonAPI extends APIModel { throw Error(`MDB | Received status code ${seriesResp.status} from ${this.apiName}.`); } - const seriesData = await seriesResp.json(); + const seriesData = (await seriesResp.json()) as TMDBSeriesDetails; const seriesName = seriesData?.name ?? ''; const airDate = seasonData.air_date ?? ''; @@ -184,9 +240,9 @@ export class TMDBSeasonAPI extends APIModel { duration: seriesData.episode_run_time?.[0]?.toString() ?? '', onlineRating: seasonData.vote_average ?? 0, actors: seriesData.credits?.cast?.map((c: any) => c.name).slice(0, 5) ?? [], - released: ['Returning Series', 'Cancelled', 'Ended'].includes(seriesData.status), + released: ['Returning Series', 'Cancelled', 'Ended'].includes(seriesData.status ?? ''), streamingServices: [], - airing: ['Returning Series'].includes(seriesData.status), + airing: ['Returning Series'].includes(seriesData.status ?? ''), userData: { watched: false, lastWatched: '', personalRating: 0 }, }); } From 3e09f4191b716726eacf4f22d385745a370f2268 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Wed, 31 Dec 2025 02:19:29 +0100 Subject: [PATCH 09/14] Moved season selection to a separate section --- src/main.ts | 110 ++++++++++++++++++++++++++++------------------------ 1 file changed, 59 insertions(+), 51 deletions(-) diff --git a/src/main.ts b/src/main.ts index 9be9faa..c564b35 100644 --- a/src/main.ts +++ b/src/main.ts @@ -234,57 +234,7 @@ export default class MediaDbPlugin extends Plugin { } // Only show the season select modal if the user searches for seasons - if (types.length === 1 && types[0] === 'season' && selectResults.length === 1 && selectResults[0].dataSource === 'TMDBSeasonAPI') { - // Dynamically import the modal - const { MediaDbSeasonSelectModal } = await import('./modals/MediaDbSeasonSelectModal'); - const TMDBSeasonAPI = this.apiManager.getApiByName('TMDBSeasonAPI') as import('./api/apis/TMDBSeasonAPI').TMDBSeasonAPI; - if (!TMDBSeasonAPI) { - new Notice('TMDBSeasonAPI not found.'); - return; - } - // Fetch all seasons for the selected series - const allSeasons = await TMDBSeasonAPI.getSeasonsForSeries(selectResults[0].id); - if (!allSeasons || allSeasons.length === 0) { - new Notice('No seasons found for this series.'); - return; - } - // Pass the original series title from the search result - const seriesName = selectResults[0]?.englishTitle || selectResults[0]?.title || ''; - const modal = new MediaDbSeasonSelectModal( - this, - allSeasons.map(s => ({ - season_number: s.seasonNumber, - name: s.seasonTitle || s.title, - episode_count: s.episodes || 0, - air_date: s.year, - poster_path: s.image, - })), - true, - seriesName, - ); - const selectedSeasons: any[] = await new Promise(resolve => { - modal.setSubmitCallback(resolve); - modal.open(); - }); - if (!selectedSeasons || selectedSeasons.length === 0) { - return; - } - // Fetch full metadata for each selected seasond and create the note - await Promise.all( - selectedSeasons.map(async season => { - const orig = allSeasons.find(s => s.seasonNumber === season.season_number); - if (orig) { - // Fetch full metadata using getById - const TMDBSeasonAPI = this.apiManager.getApiByName('TMDBSeasonAPI') as import('./api/apis/TMDBSeasonAPI').TMDBSeasonAPI; - if (TMDBSeasonAPI) { - const fullMeta = await TMDBSeasonAPI.getById(orig.id); - await this.createMediaDbNotes([fullMeta]); - } else { - await this.createMediaDbNotes([orig]); - } - } - }), - ); + if (await this.handleSeasonSelectModal(types, selectResults)) { return; } @@ -300,6 +250,64 @@ export default class MediaDbPlugin extends Plugin { await this.createMediaDbNotes(selectResults!); } + // Season select modal + private async handleSeasonSelectModal(types: string[], selectResults: MediaTypeModel[]): Promise { + if (types.length === 1 && types[0] === 'season' && selectResults.length === 1 && selectResults[0].dataSource === 'TMDBSeasonAPI') { + // Dynamically import the modal + const { MediaDbSeasonSelectModal } = await import('./modals/MediaDbSeasonSelectModal'); + const TMDBSeasonAPI = this.apiManager.getApiByName('TMDBSeasonAPI') as import('./api/apis/TMDBSeasonAPI').TMDBSeasonAPI; + if (!TMDBSeasonAPI) { + new Notice('TMDBSeasonAPI not found.'); + return true; + } + // Fetch all seasons for the selected series + const allSeasons = await TMDBSeasonAPI.getSeasonsForSeries(selectResults[0].id); + if (!allSeasons || allSeasons.length === 0) { + new Notice('No seasons found for this series.'); + return true; + } + // Pass the original series title from the search result + const seriesName = selectResults[0]?.englishTitle || selectResults[0]?.title || ''; + const modal = new MediaDbSeasonSelectModal( + this, + allSeasons.map(s => ({ + season_number: s.seasonNumber, + name: s.seasonTitle || s.title, + episode_count: s.episodes || 0, + air_date: s.year, + poster_path: s.image, + })), + true, + seriesName, + ); + const selectedSeasons: any[] = await new Promise(resolve => { + modal.setSubmitCallback(resolve); + modal.open(); + }); + if (!selectedSeasons || selectedSeasons.length === 0) { + return true; + } + // Fetch full metadata for each selected season and create the note + await Promise.all( + selectedSeasons.map(async season => { + const orig = allSeasons.find(s => s.seasonNumber === season.season_number); + if (orig) { + // Fetch full metadata using getById + const TMDBSeasonAPI = this.apiManager.getApiByName('TMDBSeasonAPI') as import('./api/apis/TMDBSeasonAPI').TMDBSeasonAPI; + if (TMDBSeasonAPI) { + const fullMeta = await TMDBSeasonAPI.getById(orig.id); + await this.createMediaDbNotes([fullMeta]); + } else { + await this.createMediaDbNotes([orig]); + } + } + }), + ); + return true; + } + return false; + } + async createEntryWithAdvancedSearchModal(): Promise { const apiSearchResults = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => { return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis); From a866beb67636841f3cb0d0f7e03e05ace8bf3a6d Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Tue, 13 Jan 2026 14:45:49 +0100 Subject: [PATCH 10/14] Small fixes Switched dynamic import to a static one Changed tmdbSeasonAPI variables to lowercase --- src/main.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main.ts b/src/main.ts index c564b35..b1c2881 100644 --- a/src/main.ts +++ b/src/main.ts @@ -18,6 +18,7 @@ import { TMDBSeasonAPI } from './api/apis/TMDBSeasonAPI'; import { TMDBMovieAPI } from './api/apis/TMDBMovieAPI'; import { WikipediaAPI } from './api/apis/WikipediaAPI'; import { ConfirmOverwriteModal } from './modals/ConfirmOverwriteModal'; +import { MediaDbSeasonSelectModal } from './modals/MediaDbSeasonSelectModal'; import type { MediaTypeModel } from './models/MediaTypeModel'; import { PropertyMapper } from './settings/PropertyMapper'; import { PropertyMapping, PropertyMappingModel } from './settings/PropertyMapping'; @@ -253,15 +254,14 @@ export default class MediaDbPlugin extends Plugin { // Season select modal private async handleSeasonSelectModal(types: string[], selectResults: MediaTypeModel[]): Promise { if (types.length === 1 && types[0] === 'season' && selectResults.length === 1 && selectResults[0].dataSource === 'TMDBSeasonAPI') { - // Dynamically import the modal - const { MediaDbSeasonSelectModal } = await import('./modals/MediaDbSeasonSelectModal'); - const TMDBSeasonAPI = this.apiManager.getApiByName('TMDBSeasonAPI') as import('./api/apis/TMDBSeasonAPI').TMDBSeasonAPI; - if (!TMDBSeasonAPI) { + // Use static import for the modal + const tmdbSeasonAPI = this.apiManager.getApiByName('TMDBSeasonAPI') as import('./api/apis/TMDBSeasonAPI').TMDBSeasonAPI; + if (!tmdbSeasonAPI) { new Notice('TMDBSeasonAPI not found.'); return true; } // Fetch all seasons for the selected series - const allSeasons = await TMDBSeasonAPI.getSeasonsForSeries(selectResults[0].id); + const allSeasons = await tmdbSeasonAPI.getSeasonsForSeries(selectResults[0].id); if (!allSeasons || allSeasons.length === 0) { new Notice('No seasons found for this series.'); return true; @@ -293,9 +293,9 @@ export default class MediaDbPlugin extends Plugin { const orig = allSeasons.find(s => s.seasonNumber === season.season_number); if (orig) { // Fetch full metadata using getById - const TMDBSeasonAPI = this.apiManager.getApiByName('TMDBSeasonAPI') as import('./api/apis/TMDBSeasonAPI').TMDBSeasonAPI; - if (TMDBSeasonAPI) { - const fullMeta = await TMDBSeasonAPI.getById(orig.id); + const tmdbSeasonAPI = this.apiManager.getApiByName('TMDBSeasonAPI') as import('./api/apis/TMDBSeasonAPI').TMDBSeasonAPI; + if (tmdbSeasonAPI) { + const fullMeta = await tmdbSeasonAPI.getById(orig.id); await this.createMediaDbNotes([fullMeta]); } else { await this.createMediaDbNotes([orig]); From 471c24d34ece8549142083fb900ee2f33989334a Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Tue, 13 Jan 2026 17:04:16 +0100 Subject: [PATCH 11/14] Added open api types to movies and series --- src/api/apis/TMDBMovieAPI.ts | 117 +++++++++++++++++++------------- src/api/apis/TMDBSeriesAPI.ts | 122 +++++++++++++++++++++------------- src/settings/Settings.ts | 11 +++ 3 files changed, 155 insertions(+), 95 deletions(-) diff --git a/src/api/apis/TMDBMovieAPI.ts b/src/api/apis/TMDBMovieAPI.ts index 71494d8..eae7467 100644 --- a/src/api/apis/TMDBMovieAPI.ts +++ b/src/api/apis/TMDBMovieAPI.ts @@ -5,6 +5,48 @@ import { MovieModel } from '../../models/MovieModel'; import { MediaType } from '../../utils/MediaType'; import { APIModel } from '../APIModel'; +interface TMDBSearchMovieResult { + id: number; + original_language?: string; + original_title?: string; + overview?: string; + popularity?: number; + poster_path?: string; + release_date?: string; + title?: string; + video?: boolean; + vote_average?: number; + vote_count?: number; + adult?: boolean; + backdrop_path?: string; + genre_ids?: number[]; +} + +interface TMDBSearchMovieResponse { + page: number; + results: TMDBSearchMovieResult[]; + total_results: number; + total_pages: number; +} + +interface TMDBMovieDetails { + id: number; + title?: string; + original_title?: string; + release_date?: string; + overview?: string; + genres?: { id: number; name: string }[]; + production_companies?: { id: number; name: string }[]; + runtime?: number; + status?: string; + vote_average?: number; + poster_path?: string; + credits?: { + cast?: { name: string }[]; + crew?: { name: string; job: string }[]; + }; +} + export class TMDBMovieAPI extends APIModel { plugin: MediaDbPlugin; typeMappings: Map; @@ -12,59 +54,46 @@ export class TMDBMovieAPI extends APIModel { constructor(plugin: MediaDbPlugin) { super(); - this.plugin = plugin; this.apiName = 'TMDBMovieAPI'; this.apiDescription = 'A community built Movie DB.'; this.apiUrl = 'https://www.themoviedb.org/'; this.types = [MediaType.Movie]; - this.typeMappings = new Map(); + this.typeMappings = new Map(); this.typeMappings.set('movie', 'movie'); } async searchByTitle(title: string): Promise { console.log(`MDB | api "${this.apiName}" queried by Title`); - if (!this.plugin.settings.TMDBKey) { throw new Error(`MDB | API key for ${this.apiName} missing.`); } const searchUrl = `https://api.themoviedb.org/3/search/movie?api_key=${this.plugin.settings.TMDBKey}&query=${encodeURIComponent(title)}&include_adult=${this.plugin.settings.sfwFilter ? 'false' : 'true'}`; - const fetchData = await fetch(searchUrl); - - if (fetchData.status === 401) { + const searchResp = await fetch(searchUrl); + if (searchResp.status === 401) { throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); } - if (fetchData.status !== 200) { - throw Error(`MDB | Received status code ${fetchData.status} from ${this.apiName}.`); + + if (searchResp.status !== 200) { + throw Error(`MDB | Received status code ${searchResp.status} from ${this.apiName}.`); } - const data = await fetchData.json(); - - if (data.total_results === 0) { - if (data.Error === 'Movie not found!') { - return []; - } - - throw Error(`MDB | Received error from ${this.apiName}: \n${JSON.stringify(data, undefined, 4)}`); - } - if (!data.results) { + const searchData = (await searchResp.json()) as TMDBSearchMovieResponse; + if (!searchData.results || searchData.total_results === 0) { return []; } - // console.debug(data.results); - const ret: MediaTypeModel[] = []; - - for (const result of data.results) { + for (const result of searchData.results) { ret.push( new MovieModel({ type: 'movie', - title: result.original_title, - englishTitle: result.title, + title: result.original_title ?? '', + englishTitle: result.title ?? '', year: result.release_date ? new Date(result.release_date).getFullYear().toString() : 'unknown', dataSource: this.apiName, - id: result.id, + id: result.id.toString(), }), ); } @@ -72,50 +101,44 @@ export class TMDBMovieAPI extends APIModel { return ret; } - async getById(id: string): Promise { + async getById(id: string): Promise { console.log(`MDB | api "${this.apiName}" queried by ID`); - if (!this.plugin.settings.TMDBKey) { throw Error(`MDB | API key for ${this.apiName} missing.`); } const searchUrl = `https://api.themoviedb.org/3/movie/${encodeURIComponent(id)}?api_key=${this.plugin.settings.TMDBKey}&append_to_response=credits`; const fetchData = await fetch(searchUrl); - if (fetchData.status === 401) { throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); } + if (fetchData.status !== 200) { throw Error(`MDB | Received status code ${fetchData.status} from ${this.apiName}.`); } - const result = await fetchData.json(); - // console.debug(result); + const result = (await fetchData.json()) as TMDBMovieDetails; return new MovieModel({ type: 'movie', - title: result.title, - englishTitle: result.title, + title: result.title ?? '', + englishTitle: result.title ?? '', year: result.release_date ? new Date(result.release_date).getFullYear().toString() : 'unknown', - premiere: this.plugin.dateFormatter.format(result.release_date, this.apiDateFormat) ?? 'unknown', + premiere: this.plugin.dateFormatter.format(result.release_date ?? '', this.apiDateFormat) ?? 'unknown', dataSource: this.apiName, url: `https://www.themoviedb.org/movie/${result.id}`, - id: result.id, - + id: result.id.toString(), plot: result.overview ?? '', - genres: result.genres.map((g: any) => g.name) ?? [], - writer: result.credits.crew.filter((c: any) => c.job === 'Screenplay').map((c: any) => c.name) ?? [], - director: result.credits.crew.filter((c: any) => c.job === 'Director').map((c: any) => c.name) ?? [], - studio: result.production_companies.map((s: any) => s.name) ?? [], - - duration: result.runtime ?? 'unknown', - onlineRating: result.vote_average, - actors: result.credits.cast.map((c: any) => c.name).slice(0, 5) ?? [], - image: `https://image.tmdb.org/t/p/w780${result.poster_path}`, - - released: ['Released'].includes(result.status), + genres: result.genres?.map((g: any) => g.name) ?? [], + writer: result.credits?.crew?.filter((c: any) => c.job === 'Screenplay').map((c: any) => c.name) ?? [], + director: result.credits?.crew?.filter((c: any) => c.job === 'Director').map((c: any) => c.name) ?? [], + studio: result.production_companies?.map((s: any) => s.name) ?? [], + duration: result.runtime?.toString() ?? 'unknown', + onlineRating: result.vote_average ?? 0, + actors: result.credits?.cast?.map((c: any) => c.name).slice(0, 5) ?? [], + image: result.poster_path ? `https://image.tmdb.org/t/p/w780${result.poster_path}` : '', + released: ['Released'].includes(result.status ?? ''), streamingServices: [], - userData: { watched: false, lastWatched: '', diff --git a/src/api/apis/TMDBSeriesAPI.ts b/src/api/apis/TMDBSeriesAPI.ts index 1fcf383..a4f9a06 100644 --- a/src/api/apis/TMDBSeriesAPI.ts +++ b/src/api/apis/TMDBSeriesAPI.ts @@ -5,6 +5,50 @@ import { SeriesModel } from '../../models/SeriesModel'; import { MediaType } from '../../utils/MediaType'; import { APIModel } from '../APIModel'; +interface TMDBSearchTVResult { + id: number; + origin_country?: string[]; + original_language?: string; + original_name?: string; + overview?: string; + popularity?: number; + poster_path?: string; + first_air_date?: string; + name?: string; + vote_average?: number; + vote_count?: number; + adult?: boolean; + backdrop_path?: string; + genre_ids?: number[]; +} + +interface TMDBSearchTVResponse { + page: number; + results: TMDBSearchTVResult[]; + total_results: number; + total_pages: number; +} + +interface TMDBSeriesDetails { + id: number; + name?: string; + original_name?: string; + first_air_date?: string; + last_air_date?: string; + overview?: string; + genres?: { id: number; name: string }[]; + created_by?: { id: number; name: string }[]; + production_companies?: { id: number; name: string }[]; + episode_run_time?: number[]; + number_of_episodes?: number; + status?: string; + vote_average?: number; + poster_path?: string; + credits?: { + cast?: { name: string }[]; + }; +} + export class TMDBSeriesAPI extends APIModel { plugin: MediaDbPlugin; typeMappings: Map; @@ -12,59 +56,46 @@ export class TMDBSeriesAPI extends APIModel { constructor(plugin: MediaDbPlugin) { super(); - this.plugin = plugin; this.apiName = 'TMDBSeriesAPI'; this.apiDescription = 'A community built Series DB.'; this.apiUrl = 'https://www.themoviedb.org/'; this.types = [MediaType.Series]; - this.typeMappings = new Map(); + this.typeMappings = new Map(); this.typeMappings.set('tv', 'series'); } async searchByTitle(title: string): Promise { console.log(`MDB | api "${this.apiName}" queried by Title`); - if (!this.plugin.settings.TMDBKey) { throw new Error(`MDB | API key for ${this.apiName} missing.`); } const searchUrl = `https://api.themoviedb.org/3/search/tv?api_key=${this.plugin.settings.TMDBKey}&query=${encodeURIComponent(title)}&include_adult=${this.plugin.settings.sfwFilter ? 'false' : 'true'}`; - const fetchData = await fetch(searchUrl); - - if (fetchData.status === 401) { + const searchResp = await fetch(searchUrl); + if (searchResp.status === 401) { throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); } - if (fetchData.status !== 200) { - throw Error(`MDB | Received status code ${fetchData.status} from ${this.apiName}.`); + + if (searchResp.status !== 200) { + throw Error(`MDB | Received status code ${searchResp.status} from ${this.apiName}.`); } - const data = await fetchData.json(); - - if (data.total_results === 0) { - if (data.Error === 'Series not found!') { - return []; - } - - throw Error(`MDB | Received error from ${this.apiName}: \n${JSON.stringify(data, undefined, 4)}`); - } - if (!data.results) { + const searchData = (await searchResp.json()) as TMDBSearchTVResponse; + if (!searchData.results || searchData.total_results === 0) { return []; } - // console.debug(data.results); - const ret: MediaTypeModel[] = []; - - for (const result of data.results) { + for (const result of searchData.results) { ret.push( new SeriesModel({ type: 'series', - title: result.original_name, - englishTitle: result.name, + title: result.original_name ?? '', + englishTitle: result.name ?? '', year: result.first_air_date ? new Date(result.first_air_date).getFullYear().toString() : 'unknown', dataSource: this.apiName, - id: result.id, + id: result.id.toString(), }), ); } @@ -72,51 +103,46 @@ export class TMDBSeriesAPI extends APIModel { return ret; } - async getById(id: string): Promise { + async getById(id: string): Promise { console.log(`MDB | api "${this.apiName}" queried by ID`); - if (!this.plugin.settings.TMDBKey) { throw Error(`MDB | API key for ${this.apiName} missing.`); } const searchUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(id)}?api_key=${this.plugin.settings.TMDBKey}&append_to_response=credits`; const fetchData = await fetch(searchUrl); - if (fetchData.status === 401) { throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); } + if (fetchData.status !== 200) { throw Error(`MDB | Received status code ${fetchData.status} from ${this.apiName}.`); } - const result = await fetchData.json(); - // console.debug(result); + const result = (await fetchData.json()) as TMDBSeriesDetails; return new SeriesModel({ type: 'series', - title: result.original_name, - englishTitle: result.name, + title: result.original_name ?? '', + englishTitle: result.name ?? '', year: result.first_air_date ? new Date(result.first_air_date).getFullYear().toString() : 'unknown', dataSource: this.apiName, url: `https://www.themoviedb.org/tv/${result.id}`, - id: result.id, - + id: result.id.toString(), plot: result.overview ?? '', - genres: result.genres.map((g: any) => g.name) ?? [], - writer: result.created_by.map((c: any) => c.name) ?? [], - studio: result.production_companies.map((s: any) => s.name) ?? [], - episodes: result.number_of_episodes, - duration: result.episode_run_time[0] ?? 'unknown', - onlineRating: result.vote_average, - actors: result.credits.cast.map((c: any) => c.name).slice(0, 5) ?? [], - image: `https://image.tmdb.org/t/p/w780${result.poster_path}`, - - released: ['Returning Series', 'Cancelled', 'Ended'].includes(result.status), + genres: result.genres?.map((g: any) => g.name) ?? [], + writer: result.created_by?.map((c: any) => c.name) ?? [], + studio: result.production_companies?.map((s: any) => s.name) ?? [], + episodes: result.number_of_episodes ?? 0, + duration: result.episode_run_time?.[0]?.toString() ?? 'unknown', + onlineRating: result.vote_average ?? 0, + actors: result.credits?.cast?.map((c: any) => c.name).slice(0, 5) ?? [], + image: result.poster_path ? `https://image.tmdb.org/t/p/w780${result.poster_path}` : '', + released: ['Returning Series', 'Cancelled', 'Ended'].includes(result.status ?? ''), streamingServices: [], - airing: ['Returning Series'].includes(result.status), - airedFrom: this.plugin.dateFormatter.format(result.first_air_date, this.apiDateFormat) ?? 'unknown', - airedTo: ['Returning Series'].includes(result.status) ? 'unknown' : (this.plugin.dateFormatter.format(result.last_air_date, this.apiDateFormat) ?? 'unknown'), - + airing: ['Returning Series'].includes(result.status ?? ''), + airedFrom: this.plugin.dateFormatter.format(result.first_air_date ?? '', this.apiDateFormat) ?? 'unknown', + airedTo: ['Returning Series'].includes(result.status ?? '') ? 'unknown' : (this.plugin.dateFormatter.format(result.last_air_date ?? '', this.apiDateFormat) ?? 'unknown'), userData: { watched: false, lastWatched: '', diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 255f0b7..94f0e7e 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -203,6 +203,17 @@ export class MediaDbSettingTab extends PluginSettingTab { void this.plugin.saveSettings(); }); }); + new Setting(containerEl) + .setName('TMDB API key') + .setDesc('API key for "https://www.themoviedb.org".') + .addText(cb => { + cb.setPlaceholder('API key') + .setValue(this.plugin.settings.TMDBKey) + .onChange(data => { + this.plugin.settings.TMDBKey = data; + void this.plugin.saveSettings(); + }); + }); new Setting(containerEl) .setName('Moby Games key') From e8154bd381dcbecc6a63da25fbd914089744eaa4 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:48:20 +0100 Subject: [PATCH 12/14] Merged changes from Zackboe * Using types from open api schema * Changed api key to api read access token --- automation/fetchSchemas.ts | 3 + src/api/apis/OpenLibraryAPI.ts | 60 +- src/api/apis/TMDBMovieAPI.ts | 151 +- src/api/apis/TMDBSeasonAPI.ts | 207 +- src/api/apis/TMDBSeriesAPI.ts | 152 +- src/api/schemas/TMDB.ts | 22832 +++++++++++++++++++++++++++++++ 6 files changed, 23141 insertions(+), 264 deletions(-) create mode 100644 src/api/schemas/TMDB.ts diff --git a/automation/fetchSchemas.ts b/automation/fetchSchemas.ts index a692ee7..f3e2d48 100644 --- a/automation/fetchSchemas.ts +++ b/automation/fetchSchemas.ts @@ -12,6 +12,9 @@ async function fetchSchema() { // https://github.com/internetarchive/openlibrary-api/blob/main/swagger.yaml await $('bun openapi-typescript ./src/api/schemas/OpenLibrary.json -o ./src/api/schemas/OpenLibrary.ts'); + + // https://developer.themoviedb.org/openapi + await $('bun openapi-typescript https://developer.themoviedb.org/openapi/tmdb-api.json -o ./src/api/schemas/TMDB.ts'); } await fetchSchema(); diff --git a/src/api/apis/OpenLibraryAPI.ts b/src/api/apis/OpenLibraryAPI.ts index e3590a0..645d15b 100644 --- a/src/api/apis/OpenLibraryAPI.ts +++ b/src/api/apis/OpenLibraryAPI.ts @@ -8,16 +8,24 @@ import { APIModel } from '../APIModel'; import type { paths } from '../schemas/OpenLibrary'; interface SearchResponse { - cover_i: number; - has_fulltext: boolean; - edition_count: number; - title: string; - author_name: string[]; - first_publish_year: number; + editions: { + docs: { + key?: string; + title?: string; + cover_i?: number; + isbn?: string[]; + }[]; + }; + cover_i?: number; + has_fulltext?: boolean; + edition_count?: number; + title?: string; + author_name?: string[]; + first_publish_year?: number; key: string; + description?: string; number_of_pages_median?: number; - cover_edition_key?: string; isbn?: string[]; ratings_average?: number; } @@ -85,8 +93,8 @@ export class OpenLibraryAPI extends APIModel { const response = await client.GET('/search.json', { params: { query: { - q: `key:${id}`, - fields: 'key,title,author_name,number_of_pages_median,first_publish_year,isbn,ratings_score,first_sentence,title_suggest,rating*,cover_edition_key', + q: `${id}`, + fields: 'key,title,author_name,number_of_pages_median,first_publish_year,isbn,ratings_score,first_sentence,title_suggest,rating*,cover*,editions,description', }, }, fetch: obsidianFetch, @@ -98,31 +106,45 @@ export class OpenLibraryAPI extends APIModel { const data = response.data as { docs: SearchResponse[]; + q?: string; }; - // TODO: maybe description. - - // console.debug(data); const result = data.docs[0]; + let key = result.key; + let title = result.title; + let cover_i = result.cover_i; + let isbnArr = result.isbn; + + // Check if the query is for /isbn/ or /books/ and extract from editions.docs if present + const q = data.q ?? ''; + if ((q.includes('/isbn/') || q.includes('/books/')) && result.editions && Array.isArray(result.editions.docs) && result.editions.docs.length > 0) { + const edition = result.editions.docs[0]; + key = edition.key ?? key; + title = edition.title ?? title; + cover_i = edition.cover_i ?? cover_i; + isbnArr = edition.isbn ?? isbnArr; + } + const pages = Number(result.number_of_pages_median); - const isbn = Number((result.isbn ?? []).find((el: string) => el.length <= 10)); - const isbn13 = Number((result.isbn ?? []).find((el: string) => el.length == 13)); + const isbn = Number((isbnArr ?? []).find((el: string) => el.length <= 10)); + const isbn13 = Number((isbnArr ?? []).find((el: string) => el.length == 13)); return new BookModel({ - title: result.title, + title: title, year: result.first_publish_year?.toString() ?? 'unknown', dataSource: this.apiName, - url: `https://openlibrary.org` + result.key, - id: result.key, + url: `https://openlibrary.org` + key, + id: key, isbn: Number.isNaN(isbn) ? undefined : isbn, isbn13: Number.isNaN(isbn13) ? undefined : isbn13, - englishTitle: result.title, + englishTitle: title, author: result.author_name?.join(', '), + plot: result.description ?? undefined, pages: Number.isNaN(pages) ? undefined : pages, onlineRating: result.ratings_average, - image: result.cover_edition_key ? `https://covers.openlibrary.org/b/OLID/` + result.cover_edition_key + `-L.jpg` : undefined, + image: cover_i ? `https://covers.openlibrary.org/b/id/` + cover_i + `-L.jpg` : undefined, released: true, diff --git a/src/api/apis/TMDBMovieAPI.ts b/src/api/apis/TMDBMovieAPI.ts index eae7467..32e90da 100644 --- a/src/api/apis/TMDBMovieAPI.ts +++ b/src/api/apis/TMDBMovieAPI.ts @@ -1,51 +1,10 @@ -import { Notice, renderResults } from 'obsidian'; +import createClient from 'openapi-fetch'; import type MediaDbPlugin from '../../main'; import type { MediaTypeModel } from '../../models/MediaTypeModel'; import { MovieModel } from '../../models/MovieModel'; import { MediaType } from '../../utils/MediaType'; import { APIModel } from '../APIModel'; - -interface TMDBSearchMovieResult { - id: number; - original_language?: string; - original_title?: string; - overview?: string; - popularity?: number; - poster_path?: string; - release_date?: string; - title?: string; - video?: boolean; - vote_average?: number; - vote_count?: number; - adult?: boolean; - backdrop_path?: string; - genre_ids?: number[]; -} - -interface TMDBSearchMovieResponse { - page: number; - results: TMDBSearchMovieResult[]; - total_results: number; - total_pages: number; -} - -interface TMDBMovieDetails { - id: number; - title?: string; - original_title?: string; - release_date?: string; - overview?: string; - genres?: { id: number; name: string }[]; - production_companies?: { id: number; name: string }[]; - runtime?: number; - status?: string; - vote_average?: number; - poster_path?: string; - credits?: { - cast?: { name: string }[]; - crew?: { name: string; job: string }[]; - }; -} +import type { paths } from '../schemas/TMDB'; export class TMDBMovieAPI extends APIModel { plugin: MediaDbPlugin; @@ -54,43 +13,64 @@ export class TMDBMovieAPI extends APIModel { constructor(plugin: MediaDbPlugin) { super(); + this.plugin = plugin; this.apiName = 'TMDBMovieAPI'; this.apiDescription = 'A community built Movie DB.'; this.apiUrl = 'https://www.themoviedb.org/'; this.types = [MediaType.Movie]; - this.typeMappings = new Map(); + this.typeMappings = new Map(); this.typeMappings.set('movie', 'movie'); } async searchByTitle(title: string): Promise { console.log(`MDB | api "${this.apiName}" queried by Title`); + if (!this.plugin.settings.TMDBKey) { throw new Error(`MDB | API key for ${this.apiName} missing.`); } - const searchUrl = `https://api.themoviedb.org/3/search/movie?api_key=${this.plugin.settings.TMDBKey}&query=${encodeURIComponent(title)}&include_adult=${this.plugin.settings.sfwFilter ? 'false' : 'true'}`; - const searchResp = await fetch(searchUrl); - if (searchResp.status === 401) { + const client = createClient({ baseUrl: 'https://api.themoviedb.org' }); + const response = await client.GET('/3/search/movie', { + headers: { + Authorization: `Bearer ${this.plugin.settings.TMDBKey}`, + }, + params: { + query: { + query: encodeURIComponent(title), + include_adult: this.plugin.settings.sfwFilter ? false : true, + }, + }, + fetch: fetch, + }); + + if (response.response.status === 401) { throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); } - - if (searchResp.status !== 200) { - throw Error(`MDB | Received status code ${searchResp.status} from ${this.apiName}.`); + if (response.response.status !== 200) { + throw Error(`MDB | Received status code ${response.response.status} from ${this.apiName}.`); } - const searchData = (await searchResp.json()) as TMDBSearchMovieResponse; - if (!searchData.results || searchData.total_results === 0) { + const data = response.data; + + if (!data) { + throw Error(`MDB | No data received from ${this.apiName}.`); + } + + if (data.total_results === 0 || !data.results) { return []; } + // console.debug(data.results); + const ret: MediaTypeModel[] = []; - for (const result of searchData.results) { + + for (const result of data.results) { ret.push( new MovieModel({ type: 'movie', - title: result.original_title ?? '', - englishTitle: result.title ?? '', + title: result.original_title, + englishTitle: result.title, year: result.release_date ? new Date(result.release_date).getFullYear().toString() : 'unknown', dataSource: this.apiName, id: result.id.toString(), @@ -101,44 +81,69 @@ export class TMDBMovieAPI extends APIModel { return ret; } - async getById(id: string): Promise { + async getById(id: string): Promise { console.log(`MDB | api "${this.apiName}" queried by ID`); + if (!this.plugin.settings.TMDBKey) { throw Error(`MDB | API key for ${this.apiName} missing.`); } - const searchUrl = `https://api.themoviedb.org/3/movie/${encodeURIComponent(id)}?api_key=${this.plugin.settings.TMDBKey}&append_to_response=credits`; - const fetchData = await fetch(searchUrl); - if (fetchData.status === 401) { + const client = createClient({ baseUrl: 'https://api.themoviedb.org' }); + const response = await client.GET('/3/movie/{movie_id}', { + headers: { + Authorization: `Bearer ${this.plugin.settings.TMDBKey}`, + }, + params: { + path: { movie_id: parseInt(id) }, + query: { + append_to_response: 'credits', + }, + }, + fetch: fetch, + }); + + if (response.response.status === 401) { throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); } - - if (fetchData.status !== 200) { - throw Error(`MDB | Received status code ${fetchData.status} from ${this.apiName}.`); + if (response.response.status !== 200) { + throw Error(`MDB | Received status code ${response.response.status} from ${this.apiName}.`); } - const result = (await fetchData.json()) as TMDBMovieDetails; + const result = response.data; + + if (!result) { + throw Error(`MDB | No data received from ${this.apiName}.`); + } + // console.debug(result); return new MovieModel({ type: 'movie', - title: result.title ?? '', - englishTitle: result.title ?? '', + title: result.title, + englishTitle: result.title, year: result.release_date ? new Date(result.release_date).getFullYear().toString() : 'unknown', - premiere: this.plugin.dateFormatter.format(result.release_date ?? '', this.apiDateFormat) ?? 'unknown', + premiere: this.plugin.dateFormatter.format(result.release_date, this.apiDateFormat) ?? 'unknown', dataSource: this.apiName, url: `https://www.themoviedb.org/movie/${result.id}`, id: result.id.toString(), + plot: result.overview ?? '', genres: result.genres?.map((g: any) => g.name) ?? [], - writer: result.credits?.crew?.filter((c: any) => c.job === 'Screenplay').map((c: any) => c.name) ?? [], - director: result.credits?.crew?.filter((c: any) => c.job === 'Director').map((c: any) => c.name) ?? [], + // TMDB's spec allows for 'append_to_response' but doesn't seem to account for it in the type + // @ts-ignore + writer: result.credits.crew?.filter((c: any) => c.job === 'Screenplay').map((c: any) => c.name) ?? [], + // @ts-ignore + director: result.credits.crew?.filter((c: any) => c.job === 'Director').map((c: any) => c.name) ?? [], studio: result.production_companies?.map((s: any) => s.name) ?? [], + duration: result.runtime?.toString() ?? 'unknown', - onlineRating: result.vote_average ?? 0, - actors: result.credits?.cast?.map((c: any) => c.name).slice(0, 5) ?? [], - image: result.poster_path ? `https://image.tmdb.org/t/p/w780${result.poster_path}` : '', - released: ['Released'].includes(result.status ?? ''), + onlineRating: result.vote_average, + // @ts-ignore + actors: result.credits.cast.map((c: any) => c.name).slice(0, 5) ?? [], + image: `https://image.tmdb.org/t/p/w780${result.poster_path}`, + + released: ['Released'].includes(result.status!), streamingServices: [], + userData: { watched: false, lastWatched: '', @@ -148,6 +153,6 @@ export class TMDBMovieAPI extends APIModel { } getDisabledMediaTypes(): MediaType[] { - return this.plugin.settings.TMDBMovieAPI_disabledMediaTypes as MediaType[]; + return this.plugin.settings.TMDBMovieAPI_disabledMediaTypes; } } diff --git a/src/api/apis/TMDBSeasonAPI.ts b/src/api/apis/TMDBSeasonAPI.ts index 58e2437..bdeffd8 100644 --- a/src/api/apis/TMDBSeasonAPI.ts +++ b/src/api/apis/TMDBSeasonAPI.ts @@ -1,65 +1,10 @@ -import { Notice, renderResults } from 'obsidian'; +import createClient from 'openapi-fetch'; import type MediaDbPlugin from '../../main'; import type { MediaTypeModel } from '../../models/MediaTypeModel'; import { MediaType } from '../../utils/MediaType'; import { APIModel } from '../APIModel'; import { SeasonModel } from '../../models/SeasonModel'; - -interface TMDBSearchTVResult { - id: number; - name?: string; - original_name?: string; - first_air_date?: string; -} - -interface TMDBSearchTVResponse { - page: number; - results: TMDBSearchTVResult[]; - total_results: number; - total_pages: number; -} - -interface TMDBSeason { - season_number: number; - name?: string; - air_date?: string; - episodes?: TMDBEpisode[]; - overview?: string; - poster_path?: string; - vote_average?: number; -} - -interface TMDBEpisode { - air_date?: string; - episode_number?: number; - name?: string; - overview?: string; -} - -interface TMDBSeriesDetails { - id: number; - name?: string; - seasons?: TMDBSeason[]; - genres?: { id: number; name: string }[]; - created_by?: { id: number; name: string }[]; - production_companies?: { id: number; name: string }[]; - episode_run_time?: number[]; - status?: string; - credits?: { - cast?: { name: string }[]; - }; -} - -interface TMDBSeasonDetails { - id: number; - season_number: number; - name?: string; - air_date?: string; - episodes?: TMDBEpisode[]; - overview?: string; - poster_path?: string; - vote_average?: number; -} +import type { paths } from '../schemas/TMDB'; export class TMDBSeasonAPI extends APIModel { plugin: MediaDbPlugin; @@ -68,6 +13,7 @@ export class TMDBSeasonAPI extends APIModel { constructor(plugin: MediaDbPlugin) { super(); + this.plugin = plugin; this.apiName = 'TMDBSeasonAPI'; this.apiDescription = 'A community built Series DB (seasons).'; @@ -84,18 +30,31 @@ export class TMDBSeasonAPI extends APIModel { throw new Error(`MDB | API key for ${this.apiName} missing.`); } - const searchUrl = `https://api.themoviedb.org/3/search/tv?api_key=${this.plugin.settings.TMDBKey}&query=${encodeURIComponent(title)}&include_adult=${this.plugin.settings.sfwFilter ? 'false' : 'true'}`; - const searchResp = await fetch(searchUrl); + const client = createClient({ baseUrl: 'https://api.themoviedb.org' }); + const searchResponse = await client.GET('/3/search/tv', { + headers: { + Authorization: `Bearer ${this.plugin.settings.TMDBKey}`, + }, + params: { + query: { + query: encodeURIComponent(title), + include_adult: this.plugin.settings.sfwFilter ? false : true, + }, + }, + fetch: fetch, + }); - if (searchResp.status === 401) { + if (searchResponse.response.status === 401) { throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); } - if (searchResp.status !== 200) { - throw Error(`MDB | Received status code ${searchResp.status} from ${this.apiName}.`); + + if (searchResponse.response.status !== 200) { + throw Error(`MDB | Received status code ${searchResponse.response.status} from ${this.apiName}.`); } - const searchData = (await searchResp.json()) as TMDBSearchTVResponse; - if (!searchData.results || searchData.total_results === 0) { + const searchData = searchResponse.data; + + if (!searchData?.results || searchData.total_results === 0) { return []; } @@ -107,22 +66,31 @@ export class TMDBSeasonAPI extends APIModel { // Fetch series details to get the total number of seasons let totalSeasons = 0; try { - const detailsUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(result.id)}?api_key=${this.plugin.settings.TMDBKey}`; - const detailsResp = await fetch(detailsUrl); - if (detailsResp.status === 200) { - const detailsData = (await detailsResp.json()) as TMDBSeriesDetails; + const detailsResponse = await client.GET('/3/tv/{series_id}', { + headers: { + Authorization: `Bearer ${this.plugin.settings.TMDBKey}`, + }, + params: { + path: { series_id: result.id ?? 0 }, + }, + fetch: fetch, + }); + + if (detailsResponse.response.status === 200 && detailsResponse.data) { + const detailsData = detailsResponse.data; if (Array.isArray(detailsData.seasons)) { totalSeasons = detailsData.seasons.length; } } } catch {} + ret.push( new SeasonModel({ title: `${result.name ?? result.original_name ?? ''}`, englishTitle: result.name ?? result.original_name ?? '', year: result.first_air_date ? new Date(result.first_air_date).getFullYear().toString() : 'unknown', dataSource: this.apiName, - id: result.id.toString(), + id: result.id?.toString() ?? '', seasonTitle: result.name ?? result.original_name ?? '', seasonNumber: totalSeasons, }), @@ -132,26 +100,41 @@ export class TMDBSeasonAPI extends APIModel { return ret; } - //Fetch all seasons for a given series + // Fetch all seasons for a given series async getSeasonsForSeries(tvId: string): Promise { if (!this.plugin.settings.TMDBKey) { throw new Error(`MDB | API key for ${this.apiName} missing.`); } - const seriesUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}?api_key=${this.plugin.settings.TMDBKey}`; - const seriesResp = await fetch(seriesUrl); - if (seriesResp.status === 401) { + + const client = createClient({ baseUrl: 'https://api.themoviedb.org' }); + const seriesResponse = await client.GET('/3/tv/{series_id}', { + headers: { + Authorization: `Bearer ${this.plugin.settings.TMDBKey}`, + }, + params: { + path: { series_id: parseInt(tvId) }, + }, + fetch: fetch, + }); + + if (seriesResponse.response.status === 401) { throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); } - if (seriesResp.status !== 200) { - throw Error(`MDB | Received status code ${seriesResp.status} from ${this.apiName}.`); + + if (seriesResponse.response.status !== 200) { + throw Error(`MDB | Received status code ${seriesResponse.response.status} from ${this.apiName}.`); } - const seriesData = (await seriesResp.json()) as TMDBSeriesDetails; + + const seriesData = seriesResponse.data; const seriesName = seriesData?.name ?? ''; + const ret: SeasonModel[] = []; + if (Array.isArray(seriesData?.seasons)) { for (const season of seriesData.seasons) { const seasonNumber = season.season_number ?? 0; const titleText = `${seriesName} - Season ${seasonNumber}`; + ret.push( new SeasonModel({ title: titleText, @@ -165,6 +148,7 @@ export class TMDBSeasonAPI extends APIModel { ); } } + return ret; } @@ -178,38 +162,69 @@ export class TMDBSeasonAPI extends APIModel { // Expect season ids like "12345/season/2" const m = /^(\d+)\/season\/(\d+)$/.exec(id); if (!m) { - throw Error(`MDB | Invalid season id "${id}". Expected format "/season/".`); + throw Error(`MDB | Invalid season id "${id}". Expected format "/season/".`); } const tvId = m[1]; const seasonNumber = m[2]; - const seasonUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}/season/${encodeURIComponent(seasonNumber)}?api_key=${this.plugin.settings.TMDBKey}`; - const seasonResp = await fetch(seasonUrl); + const client = createClient({ baseUrl: 'https://api.themoviedb.org' }); - if (seasonResp.status === 401) { + // Fetch season details + const seasonResponse = await client.GET('/3/tv/{series_id}/season/{season_number}', { + headers: { + Authorization: `Bearer ${this.plugin.settings.TMDBKey}`, + }, + params: { + path: { + series_id: parseInt(tvId), + season_number: parseInt(seasonNumber), + }, + }, + fetch: fetch, + }); + + if (seasonResponse.response.status === 401) { throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); } - if (seasonResp.status !== 200) { - throw Error(`MDB | Received status code ${seasonResp.status} from ${this.apiName}.`); + + if (seasonResponse.response.status !== 200) { + throw Error(`MDB | Received status code ${seasonResponse.response.status} from ${this.apiName}.`); } - const seasonData = (await seasonResp.json()) as TMDBSeasonDetails; - + const seasonData = seasonResponse.data; + if (!seasonData) { + throw Error(`MDB | No data received from ${this.apiName}.`); + } // Fetch parent series to build consistent titles and inherit fields - const seriesUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(tvId)}?api_key=${this.plugin.settings.TMDBKey}&append_to_response=credits`; - const seriesResp = await fetch(seriesUrl); + const seriesResponse = await client.GET('/3/tv/{series_id}', { + headers: { + Authorization: `Bearer ${this.plugin.settings.TMDBKey}`, + }, + params: { + path: { series_id: parseInt(tvId) }, + query: { + append_to_response: 'credits', + }, + }, + fetch: fetch, + }); - if (seriesResp.status === 401) { + if (seriesResponse.response.status === 401) { throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); } - if (seriesResp.status !== 200) { - throw Error(`MDB | Received status code ${seriesResp.status} from ${this.apiName}.`); + + if (seriesResponse.response.status !== 200) { + throw Error(`MDB | Received status code ${seriesResponse.response.status} from ${this.apiName}.`); } - const seriesData = (await seriesResp.json()) as TMDBSeriesDetails; - const seriesName = seriesData?.name ?? ''; + const seriesData = seriesResponse.data; + if (!seriesData) { + throw Error(`MDB | No data received from ${this.apiName}.`); + } + + const seriesName = seriesData?.name ?? ''; const airDate = seasonData.air_date ?? ''; const titleText = `${seriesName} - Season ${seasonData.season_number}`; @@ -229,16 +244,17 @@ export class TMDBSeasonAPI extends APIModel { id: `${tvId}/season/${seasonData.season_number}`, seasonTitle: seasonData.name ?? titleText, seasonNumber: seasonData.season_number ?? Number(seasonNumber), - episodes: Array.isArray(seasonData.episodes) ? seasonData.episodes.length : (seasonData.episodes ?? 0), + episodes: Array.isArray(seasonData.episodes) ? seasonData.episodes.length : 0, airedFrom: this.plugin.dateFormatter.format(airDate, this.apiDateFormat) ?? 'unknown', airedTo: airedTo, plot: seasonData.overview ?? '', image: seasonData.poster_path ? `https://image.tmdb.org/t/p/w780${seasonData.poster_path}` : '', - genres: seriesData.genres?.map((g: any) => g.name) ?? [], - writer: seriesData.created_by?.map((c: any) => c.name) ?? [], - studio: seriesData.production_companies?.map((s: any) => s.name) ?? [], + genres: seriesData.genres?.map(g => g.name ?? '').filter(name => name !== '') ?? [], + writer: seriesData.created_by?.map(c => c.name ?? '').filter(name => name !== '') ?? [], + studio: seriesData.production_companies?.map(s => s.name ?? '').filter(name => name !== '') ?? [], duration: seriesData.episode_run_time?.[0]?.toString() ?? '', onlineRating: seasonData.vote_average ?? 0, + // @ts-ignore - append_to_response credits not reflected in base schema actors: seriesData.credits?.cast?.map((c: any) => c.name).slice(0, 5) ?? [], released: ['Returning Series', 'Cancelled', 'Ended'].includes(seriesData.status ?? ''), streamingServices: [], @@ -247,7 +263,6 @@ export class TMDBSeasonAPI extends APIModel { }); } - // Settings didn’t define TMDBSeasonAPIdisabledMediaTypes yet; return an empty list for now getDisabledMediaTypes(): MediaType[] { return []; } diff --git a/src/api/apis/TMDBSeriesAPI.ts b/src/api/apis/TMDBSeriesAPI.ts index a4f9a06..299663f 100644 --- a/src/api/apis/TMDBSeriesAPI.ts +++ b/src/api/apis/TMDBSeriesAPI.ts @@ -1,53 +1,10 @@ -import { Notice, renderResults } from 'obsidian'; +import createClient from 'openapi-fetch'; import type MediaDbPlugin from '../../main'; import type { MediaTypeModel } from '../../models/MediaTypeModel'; import { SeriesModel } from '../../models/SeriesModel'; import { MediaType } from '../../utils/MediaType'; import { APIModel } from '../APIModel'; - -interface TMDBSearchTVResult { - id: number; - origin_country?: string[]; - original_language?: string; - original_name?: string; - overview?: string; - popularity?: number; - poster_path?: string; - first_air_date?: string; - name?: string; - vote_average?: number; - vote_count?: number; - adult?: boolean; - backdrop_path?: string; - genre_ids?: number[]; -} - -interface TMDBSearchTVResponse { - page: number; - results: TMDBSearchTVResult[]; - total_results: number; - total_pages: number; -} - -interface TMDBSeriesDetails { - id: number; - name?: string; - original_name?: string; - first_air_date?: string; - last_air_date?: string; - overview?: string; - genres?: { id: number; name: string }[]; - created_by?: { id: number; name: string }[]; - production_companies?: { id: number; name: string }[]; - episode_run_time?: number[]; - number_of_episodes?: number; - status?: string; - vote_average?: number; - poster_path?: string; - credits?: { - cast?: { name: string }[]; - }; -} +import type { paths } from '../schemas/TMDB'; export class TMDBSeriesAPI extends APIModel { plugin: MediaDbPlugin; @@ -56,43 +13,64 @@ export class TMDBSeriesAPI extends APIModel { constructor(plugin: MediaDbPlugin) { super(); + this.plugin = plugin; this.apiName = 'TMDBSeriesAPI'; this.apiDescription = 'A community built Series DB.'; this.apiUrl = 'https://www.themoviedb.org/'; this.types = [MediaType.Series]; - this.typeMappings = new Map(); + this.typeMappings = new Map(); this.typeMappings.set('tv', 'series'); } async searchByTitle(title: string): Promise { console.log(`MDB | api "${this.apiName}" queried by Title`); + if (!this.plugin.settings.TMDBKey) { throw new Error(`MDB | API key for ${this.apiName} missing.`); } - const searchUrl = `https://api.themoviedb.org/3/search/tv?api_key=${this.plugin.settings.TMDBKey}&query=${encodeURIComponent(title)}&include_adult=${this.plugin.settings.sfwFilter ? 'false' : 'true'}`; - const searchResp = await fetch(searchUrl); - if (searchResp.status === 401) { + const client = createClient({ baseUrl: 'https://api.themoviedb.org' }); + const response = await client.GET('/3/search/tv', { + headers: { + Authorization: `Bearer ${this.plugin.settings.TMDBKey}`, + }, + params: { + query: { + query: encodeURIComponent(title), + include_adult: this.plugin.settings.sfwFilter ? false : true, + }, + }, + fetch: fetch, + }); + + if (response.response.status === 401) { throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); } - - if (searchResp.status !== 200) { - throw Error(`MDB | Received status code ${searchResp.status} from ${this.apiName}.`); + if (response.response.status !== 200) { + throw Error(`MDB | Received status code ${response.response.status} from ${this.apiName}.`); } - const searchData = (await searchResp.json()) as TMDBSearchTVResponse; - if (!searchData.results || searchData.total_results === 0) { + const data = response.data; + + if (!data) { + throw Error(`MDB | No data received from ${this.apiName}.`); + } + + if (data.total_results === 0 || !data.results) { return []; } + // console.debug(data.results); + const ret: MediaTypeModel[] = []; - for (const result of searchData.results) { + + for (const result of data.results) { ret.push( new SeriesModel({ type: 'series', - title: result.original_name ?? '', - englishTitle: result.name ?? '', + title: result.original_name, + englishTitle: result.name, year: result.first_air_date ? new Date(result.first_air_date).getFullYear().toString() : 'unknown', dataSource: this.apiName, id: result.id.toString(), @@ -103,46 +81,68 @@ export class TMDBSeriesAPI extends APIModel { return ret; } - async getById(id: string): Promise { + async getById(id: string): Promise { console.log(`MDB | api "${this.apiName}" queried by ID`); + if (!this.plugin.settings.TMDBKey) { throw Error(`MDB | API key for ${this.apiName} missing.`); } - const searchUrl = `https://api.themoviedb.org/3/tv/${encodeURIComponent(id)}?api_key=${this.plugin.settings.TMDBKey}&append_to_response=credits`; - const fetchData = await fetch(searchUrl); - if (fetchData.status === 401) { + const client = createClient({ baseUrl: 'https://api.themoviedb.org' }); + const response = await client.GET('/3/tv/{series_id}', { + headers: { + Authorization: `Bearer ${this.plugin.settings.TMDBKey}`, + }, + params: { + path: { series_id: parseInt(id) }, + query: { + append_to_response: 'credits', + }, + }, + fetch: fetch, + }); + + if (response.response.status === 401) { throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`); } - - if (fetchData.status !== 200) { - throw Error(`MDB | Received status code ${fetchData.status} from ${this.apiName}.`); + if (response.response.status !== 200) { + throw Error(`MDB | Received status code ${response.response.status} from ${this.apiName}.`); } - const result = (await fetchData.json()) as TMDBSeriesDetails; + const result = response.data; + + if (!result) { + throw Error(`MDB | No data received from ${this.apiName}.`); + } + // console.debug(result); return new SeriesModel({ type: 'series', - title: result.original_name ?? '', - englishTitle: result.name ?? '', + title: result.original_name, + englishTitle: result.name, year: result.first_air_date ? new Date(result.first_air_date).getFullYear().toString() : 'unknown', dataSource: this.apiName, url: `https://www.themoviedb.org/tv/${result.id}`, id: result.id.toString(), + plot: result.overview ?? '', genres: result.genres?.map((g: any) => g.name) ?? [], writer: result.created_by?.map((c: any) => c.name) ?? [], studio: result.production_companies?.map((s: any) => s.name) ?? [], - episodes: result.number_of_episodes ?? 0, + episodes: result.number_of_episodes, duration: result.episode_run_time?.[0]?.toString() ?? 'unknown', - onlineRating: result.vote_average ?? 0, - actors: result.credits?.cast?.map((c: any) => c.name).slice(0, 5) ?? [], - image: result.poster_path ? `https://image.tmdb.org/t/p/w780${result.poster_path}` : '', - released: ['Returning Series', 'Cancelled', 'Ended'].includes(result.status ?? ''), + onlineRating: result.vote_average, + // TMDB's spec allows for 'append_to_response' but doesn't seem to account for it in the type + // @ts-ignore + actors: result.credits?.cast.map((c: any) => c.name).slice(0, 5) ?? [], + image: result.poster_path ? `https://image.tmdb.org/t/p/w780${result.poster_path}` : null, + + released: ['Returning Series', 'Cancelled', 'Ended'].includes(result.status!), streamingServices: [], - airing: ['Returning Series'].includes(result.status ?? ''), - airedFrom: this.plugin.dateFormatter.format(result.first_air_date ?? '', this.apiDateFormat) ?? 'unknown', - airedTo: ['Returning Series'].includes(result.status ?? '') ? 'unknown' : (this.plugin.dateFormatter.format(result.last_air_date ?? '', this.apiDateFormat) ?? 'unknown'), + airing: ['Returning Series'].includes(result.status!), + airedFrom: this.plugin.dateFormatter.format(result.first_air_date, this.apiDateFormat) ?? 'unknown', + airedTo: ['Returning Series'].includes(result.status!) ? 'unknown' : (this.plugin.dateFormatter.format(result.last_air_date, this.apiDateFormat) ?? 'unknown'), + userData: { watched: false, lastWatched: '', @@ -152,6 +152,6 @@ export class TMDBSeriesAPI extends APIModel { } getDisabledMediaTypes(): MediaType[] { - return this.plugin.settings.TMDBSeriesAPI_disabledMediaTypes as MediaType[]; + return this.plugin.settings.TMDBSeriesAPI_disabledMediaTypes; } } diff --git a/src/api/schemas/TMDB.ts b/src/api/schemas/TMDB.ts new file mode 100644 index 0000000..6df120e --- /dev/null +++ b/src/api/schemas/TMDB.ts @@ -0,0 +1,22832 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + '/3/authentication': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Validate Key + * @description Test your API Key to see if it's valid. + */ + get: operations['authentication-validate-key']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/account/{account_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Details + * @description Get the public details of an account on TMDB. + */ + get: operations['account-details']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/account/{account_id}/favorite': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add Favorite + * @description Mark a movie or TV show as a favourite. + */ + post: operations['account-add-favorite']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/account/{account_id}/watchlist': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add To Watchlist + * @description Add a movie or TV show to your watchlist. + */ + post: operations['account-add-to-watchlist']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/account/{account_id}/favorite/movies': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Favorite Movies + * @description Get a users list of favourite movies. + */ + get: operations['account-get-favorites']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/account/{account_id}/favorite/tv': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Favorite TV + * @description Get a users list of favourite TV shows. + */ + get: operations['account-favorite-tv']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/account/{account_id}/lists': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Lists + * @description Get a users list of custom lists. + */ + get: operations['account-lists']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/account/{account_id}/rated/movies': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Rated Movies + * @description Get a users list of rated movies. + */ + get: operations['account-rated-movies']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/account/{account_id}/rated/tv': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Rated TV + * @description Get a users list of rated TV shows. + */ + get: operations['account-rated-tv']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/account/{account_id}/rated/tv/episodes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Rated TV Episodes + * @description Get a users list of rated TV episodes. + */ + get: operations['account-rated-tv-episodes']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/account/{account_id}/watchlist/movies': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Watchlist Movies + * @description Get a list of movies added to a users watchlist. + */ + get: operations['account-watchlist-movies']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/account/{account_id}/watchlist/tv': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Watchlist TV + * @description Get a list of TV shows added to a users watchlist. + */ + get: operations['account-watchlist-tv']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/authentication/guest_session/new': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Create Guest Session */ + get: operations['authentication-create-guest-session']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/authentication/token/new': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Create Request Token */ + get: operations['authentication-create-request-token']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/authentication/session/new': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Create Session */ + post: operations['authentication-create-session']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/authentication/session/convert/4': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Create Session (from v4 token) */ + post: operations['authentication-create-session-from-v4-token']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/authentication/token/validate_with_login': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create Session (with login) + * @description This method allows an application to validate a request token by entering a username and password. + */ + post: operations['authentication-create-session-from-login']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/authentication/session': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete Session */ + delete: operations['authentication-delete-session']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/certification/movie/list': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Movie Certifications + * @description Get an up to date list of the officially supported movie certifications on TMDB. + */ + get: operations['certification-movie-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/certification/tv/list': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** TV Certifications */ + get: operations['certifications-tv-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/changes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Movie List + * @description Get a list of all of the movie ids that have been changed in the past 24 hours. + */ + get: operations['changes-movie-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/person/changes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** People List */ + get: operations['changes-people-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/changes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** TV List */ + get: operations['changes-tv-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/collection/{collection_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Details + * @description Get collection details by ID. + */ + get: operations['collection-details']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/collection/{collection_id}/images': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Images + * @description Get the images that belong to a collection. + */ + get: operations['collection-images']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/collection/{collection_id}/translations': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Translations */ + get: operations['collection-translations']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/company/{company_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Details + * @description Get the company details by ID. + */ + get: operations['company-details']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/company/{company_id}/alternative_names': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Alternative Names + * @description Get the company details by ID. + */ + get: operations['company-alternative-names']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/company/{company_id}/images': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Images + * @description Get the company logos by id. + */ + get: operations['company-images']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/configuration': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Details + * @description Query the API configuration details. + */ + get: operations['configuration-details']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/configuration/countries': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Countries + * @description Get the list of countries (ISO 3166-1 tags) used throughout TMDB. + */ + get: operations['configuration-countries']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/configuration/jobs': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Jobs + * @description Get the list of the jobs and departments we use on TMDB. + */ + get: operations['configuration-jobs']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/configuration/languages': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Languages + * @description Get the list of languages (ISO 639-1 tags) used throughout TMDB. + */ + get: operations['configuration-languages']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/configuration/primary_translations': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Primary Translations + * @description Get a list of the officially supported translations on TMDB. + */ + get: operations['configuration-primary-translations']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/configuration/timezones': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Timezones + * @description Get the list of timezones used throughout TMDB. + */ + get: operations['configuration-timezones']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/credit/{credit_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Details + * @description Get a movie or TV credit details by ID. + */ + get: operations['credit-details']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/discover/movie': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Movie + * @description Find movies using over 30 filters and sort options. + */ + get: operations['discover-movie']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/discover/tv': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * TV + * @description Find TV shows using over 30 filters and sort options. + */ + get: operations['discover-tv']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/find/{external_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Find By ID + * @description Find data by external ID's. + */ + get: operations['find-by-id']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/genre/movie/list': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Movie List + * @description Get the list of official genres for movies. + */ + get: operations['genre-movie-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/genre/tv/list': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * TV List + * @description Get the list of official genres for TV shows. + */ + get: operations['genre-tv-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/guest_session/{guest_session_id}/rated/movies': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Rated Movies + * @description Get the rated movies for a guest session. + */ + get: operations['guest-session-rated-movies']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/guest_session/{guest_session_id}/rated/tv': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Rated TV + * @description Get the rated TV shows for a guest session. + */ + get: operations['guest-session-rated-tv']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/guest_session/{guest_session_id}/rated/tv/episodes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Rated TV Episodes + * @description Get the rated TV episodes for a guest session. + */ + get: operations['guest-session-rated-tv-episodes']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/keyword/{keyword_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Details */ + get: operations['keyword-details']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/keyword/{keyword_id}/movies': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Movies */ + get: operations['keyword-movies']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/list/{list_id}/add_item': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add Movie + * @description Add a movie to a list. + */ + post: operations['list-add-movie']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/list/{list_id}/item_status': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Check Item Status + * @description Use this method to check if an item has already been added to the list. + */ + get: operations['list-check-item-status']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/list/{list_id}/clear': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Clear + * @description Clear all items from a list. + */ + post: operations['list-clear']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/list': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Create */ + post: operations['list-create']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/list/{list_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Details */ + get: operations['list-details']; + put?: never; + post?: never; + /** + * Delete + * @description Delete a list. + */ + delete: operations['list-delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/list/{list_id}/remove_item': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Remove Movie + * @description Remove a movie from a list. + */ + post: operations['list-remove-movie']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/now_playing': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Now Playing + * @description Get a list of movies that are currently in theatres. + */ + get: operations['movie-now-playing-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/popular': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Popular + * @description Get a list of movies ordered by popularity. + */ + get: operations['movie-popular-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/top_rated': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Top Rated + * @description Get a list of movies ordered by rating. + */ + get: operations['movie-top-rated-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/upcoming': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Upcoming + * @description Get a list of movies that are being released soon. + */ + get: operations['movie-upcoming-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Details + * @description Get the top level details of a movie by ID. + */ + get: operations['movie-details']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/account_states': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Account States + * @description Get the rating, watchlist and favourite status of an account. + */ + get: operations['movie-account-states']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/alternative_titles': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Alternative Titles + * @description Get the alternative titles for a movie. + */ + get: operations['movie-alternative-titles']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/changes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Changes + * @description Get the recent changes for a movie. + */ + get: operations['movie-changes']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/credits': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Credits */ + get: operations['movie-credits']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/external_ids': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** External IDs */ + get: operations['movie-external-ids']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/images': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Images + * @description Get the images that belong to a movie. + */ + get: operations['movie-images']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/keywords': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Keywords */ + get: operations['movie-keywords']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/latest': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Latest + * @description Get the newest movie ID. + */ + get: operations['movie-latest-id']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/lists': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Lists + * @description Get the lists that a movie has been added to. + */ + get: operations['movie-lists']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/recommendations': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Recommendations */ + get: operations['movie-recommendations']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/release_dates': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Release Dates + * @description Get the release dates and certifications for a movie. + */ + get: operations['movie-release-dates']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/reviews': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Reviews + * @description Get the user reviews for a movie. + */ + get: operations['movie-reviews']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/similar': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Similar + * @description Get the similar movies based on genres and keywords. + */ + get: operations['movie-similar']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/translations': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Translations + * @description Get the translations for a movie. + */ + get: operations['movie-translations']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/videos': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Videos */ + get: operations['movie-videos']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/watch/providers': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Watch Providers + * @description Get the list of streaming providers we have for a movie. + */ + get: operations['movie-watch-providers']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/movie/{movie_id}/rating': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add Rating + * @description Rate a movie and save it to your rated list. + */ + post: operations['movie-add-rating']; + /** + * Delete Rating + * @description Delete a user rating. + */ + delete: operations['movie-delete-rating']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/network/{network_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Details */ + get: operations['network-details']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/network/{network_id}/alternative_names': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Alternative Names + * @description Get the alternative names of a network. + */ + get: operations['details-copy']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/network/{network_id}/images': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Images + * @description Get the TV network logos by id. + */ + get: operations['alternative-names-copy']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/person/popular': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Popular + * @description Get a list of people ordered by popularity. + */ + get: operations['person-popular-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/person/{person_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Details + * @description Query the top level details of a person. + */ + get: operations['person-details']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/person/{person_id}/changes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Changes + * @description Get the recent changes for a person. + */ + get: operations['person-changes']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/person/{person_id}/combined_credits': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Combined Credits + * @description Get the combined movie and TV credits that belong to a person. + */ + get: operations['person-combined-credits']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/person/{person_id}/external_ids': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * External IDs + * @description Get the external ID's that belong to a person. + */ + get: operations['person-external-ids']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/person/{person_id}/images': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Images + * @description Get the profile images that belong to a person. + */ + get: operations['person-images']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/person/latest': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Latest + * @description Get the newest created person. This is a live response and will continuously change. + */ + get: operations['person-latest-id']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/person/{person_id}/movie_credits': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Movie Credits + * @description Get the movie credits for a person. + */ + get: operations['person-movie-credits']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/person/{person_id}/tv_credits': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * TV Credits + * @description Get the TV credits that belong to a person. + */ + get: operations['person-tv-credits']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/person/{person_id}/tagged_images': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Tagged Images + * @description Get the tagged images for a person. + */ + get: operations['person-tagged-images']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/person/{person_id}/translations': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Translations + * @description Get the translations that belong to a person. + */ + get: operations['translations']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/review/{review_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Details + * @description Retrieve the details of a movie or TV show review. + */ + get: operations['review-details']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/search/collection': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Collection + * @description Search for collections by their original, translated and alternative names. + */ + get: operations['search-collection']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/search/company': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Company + * @description Search for companies by their original and alternative names. + */ + get: operations['search-company']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/search/keyword': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Keyword + * @description Search for keywords by their name. + */ + get: operations['search-keyword']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/search/movie': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Movie + * @description Search for movies by their original, translated and alternative titles. + */ + get: operations['search-movie']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/search/multi': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Multi + * @description Use multi search when you want to search for movies, TV shows and people in a single request. + */ + get: operations['search-multi']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/search/person': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Person + * @description Search for people by their name and also known as names. + */ + get: operations['search-person']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/search/tv': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * TV + * @description Search for TV shows by their original, translated and also known as names. + */ + get: operations['search-tv']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/trending/all/{time_window}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * All + * @description Get the trending movies, TV shows and people. + */ + get: operations['trending-all']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/trending/movie/{time_window}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Movies + * @description Get the trending movies on TMDB. + */ + get: operations['trending-movies']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/trending/person/{time_window}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * People + * @description Get the trending people on TMDB. + */ + get: operations['trending-people']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/trending/tv/{time_window}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * TV + * @description Get the trending TV shows on TMDB. + */ + get: operations['trending-tv']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/airing_today': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Airing Today + * @description Get a list of TV shows airing today. + */ + get: operations['tv-series-airing-today-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/on_the_air': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * On The Air + * @description Get a list of TV shows that air in the next 7 days. + */ + get: operations['tv-series-on-the-air-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/popular': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Popular + * @description Get a list of TV shows ordered by popularity. + */ + get: operations['tv-series-popular-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/top_rated': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Top Rated + * @description Get a list of TV shows ordered by rating. + */ + get: operations['tv-series-top-rated-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Details + * @description Get the details of a TV show. + */ + get: operations['tv-series-details']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/account_states': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Account States + * @description Get the rating, watchlist and favourite status. + */ + get: operations['tv-series-account-states']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/aggregate_credits': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Aggregate Credits + * @description Get the aggregate credits (cast and crew) that have been added to a TV show. + */ + get: operations['tv-series-aggregate-credits']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/alternative_titles': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Alternative Titles + * @description Get the alternative titles that have been added to a TV show. + */ + get: operations['tv-series-alternative-titles']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/changes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Changes + * @description Get the recent changes for a TV show. + */ + get: operations['tv-series-changes']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/content_ratings': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Content Ratings + * @description Get the content ratings that have been added to a TV show. + */ + get: operations['tv-series-content-ratings']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/credits': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Credits + * @description Get the latest season credits of a TV show. + */ + get: operations['tv-series-credits']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/episode_groups': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Episode Groups + * @description Get the episode groups that have been added to a TV show. + */ + get: operations['tv-series-episode-groups']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/external_ids': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * External IDs + * @description Get a list of external IDs that have been added to a TV show. + */ + get: operations['tv-series-external-ids']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/images': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Images + * @description Get the images that belong to a TV series. + */ + get: operations['tv-series-images']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/keywords': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Keywords + * @description Get a list of keywords that have been added to a TV show. + */ + get: operations['tv-series-keywords']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/latest': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Latest + * @description Get the newest TV show ID. + */ + get: operations['tv-series-latest-id']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/lists': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Lists + * @description Get the lists that a TV series has been added to. + */ + get: operations['lists-copy']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/recommendations': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Recommendations */ + get: operations['tv-series-recommendations']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/reviews': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Reviews + * @description Get the reviews that have been added to a TV show. + */ + get: operations['tv-series-reviews']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/screened_theatrically': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Screened Theatrically + * @description Get the seasons and episodes that have screened theatrically. + */ + get: operations['tv-series-screened-theatrically']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/similar': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Similar + * @description Get the similar TV shows. + */ + get: operations['tv-series-similar']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/translations': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Translations + * @description Get the translations that have been added to a TV show. + */ + get: operations['tv-series-translations']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/videos': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Videos + * @description Get the videos that belong to a TV show. + */ + get: operations['tv-series-videos']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/watch/providers': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Watch Providers + * @description Get the list of streaming providers we have for a TV show. + */ + get: operations['tv-series-watch-providers']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/rating': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add Rating + * @description Rate a TV show and save it to your rated list. + */ + post: operations['tv-series-add-rating']; + /** Delete Rating */ + delete: operations['tv-series-delete-rating']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Details + * @description Query the details of a TV season. + */ + get: operations['tv-season-details']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/account_states': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Account States + * @description Get the rating, watchlist and favourite status. + */ + get: operations['tv-season-account-states']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/aggregate_credits': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Aggregate Credits + * @description Get the aggregate credits (cast and crew) that have been added to a TV season. + */ + get: operations['tv-season-aggregate-credits']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/season/{season_id}/changes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Changes + * @description Get the recent changes for a TV season. + */ + get: operations['tv-season-changes-by-id']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/credits': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Credits */ + get: operations['tv-season-credits']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/external_ids': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * External IDs + * @description Get a list of external IDs that have been added to a TV season. + */ + get: operations['tv-season-external-ids']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/images': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Images + * @description Get the images that belong to a TV season. + */ + get: operations['tv-season-images']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/translations': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Translations + * @description Get the translations for a TV season. + */ + get: operations['tv-season-translations']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/videos': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Videos + * @description Get the videos that belong to a TV season. + */ + get: operations['tv-season-videos']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/watch/providers': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Watch Providers + * @description Get the list of streaming providers we have for a TV season. + */ + get: operations['tv-season-watch-providers']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/episode/{episode_number}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Details + * @description Query the details of a TV episode. + */ + get: operations['tv-episode-details']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/episode/{episode_number}/account_states': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Account States + * @description Get the rating, watchlist and favourite status. + */ + get: operations['tv-episode-account-states']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/episode/{episode_id}/changes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Changes + * @description Get the recent changes for a TV episode. + */ + get: operations['tv-episode-changes-by-id']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/episode/{episode_number}/credits': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Credits */ + get: operations['tv-episode-credits']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/episode/{episode_number}/external_ids': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * External IDs + * @description Get a list of external IDs that have been added to a TV episode. + */ + get: operations['tv-episode-external-ids']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/episode/{episode_number}/images': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Images + * @description Get the images that belong to a TV episode. + */ + get: operations['tv-episode-images']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/episode/{episode_number}/translations': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Translations + * @description Get the translations that have been added to a TV episode. + */ + get: operations['tv-episode-translations']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/episode/{episode_number}/videos': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Videos + * @description Get the videos that belong to a TV episode. + */ + get: operations['tv-episode-videos']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/{series_id}/season/{season_number}/episode/{episode_number}/rating': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add Rating + * @description Rate a TV episode and save it to your rated list. + */ + post: operations['tv-episode-add-rating']; + /** + * Delete Rating + * @description Delete your rating on a TV episode. + */ + delete: operations['tv-episode-delete-rating']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/tv/episode_group/{tv_episode_group_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Details + * @description Get the details of a TV episode group. + */ + get: operations['tv-episode-group-details']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/watch/providers/regions': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Available Regions + * @description Get the list of the countries we have watch provider (OTT/streaming) data for. + */ + get: operations['watch-providers-available-regions']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/watch/providers/movie': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Movie Providers + * @description Get the list of streaming providers we have for movies. + */ + get: operations['watch-providers-movie-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/3/watch/providers/tv': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * TV Providers + * @description Get the list of streaming providers we have for TV shows. + */ + get: operations['watch-provider-tv-list']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: never; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + 'authentication-validate-key': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default true + * @example true + */ + success: boolean; + /** + * @default 0 + * @example 1 + */ + status_code: number; + /** @example Success. */ + status_message?: string; + }; + }; + }; + /** @description 401 */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 7 + */ + status_code: number; + /** @example Invalid API key: You must be granted a valid key. */ + status_message?: string; + /** + * @default true + * @example false + */ + success: boolean; + }; + }; + }; + }; + }; + 'account-details': { + parameters: { + query?: { + session_id?: string; + }; + header?: never; + path: { + account_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + avatar?: { + gravatar?: { + /** @example c9e9fc152ee756a900db85757c29815d */ + hash?: string; + }; + tmdb?: { + /** @example /xy44UvpbTgzs9kWmp4C3fEaCl5h.png */ + avatar_path?: string; + }; + }; + /** + * @default 0 + * @example 548 + */ + id: number; + /** @example en */ + iso_639_1?: string; + /** @example CA */ + iso_3166_1?: string; + /** @example Travis Bell */ + name?: string; + /** + * @default true + * @example false + */ + include_adult: boolean; + /** @example travisbell */ + username?: string; + }; + }; + }; + }; + }; + 'account-add-favorite': { + parameters: { + query?: { + session_id?: string; + }; + header?: never; + path: { + account_id: number; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/json': { + /** Format: json */ + RAW_BODY: string; + }; + }; + }; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + status_code: number; + /** @example Success. */ + status_message?: string; + }; + }; + }; + }; + }; + 'account-add-to-watchlist': { + parameters: { + query?: { + session_id?: string; + }; + header?: never; + path: { + account_id: number; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/json': { + /** Format: json */ + RAW_BODY: string; + }; + }; + }; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + status_code: number; + /** @example Success. */ + status_message?: string; + }; + }; + }; + }; + }; + 'account-get-favorites': { + parameters: { + query?: { + language?: string; + page?: number; + session_id?: string; + sort_by?: 'created_at.asc' | 'created_at.desc'; + }; + header?: never; + path: { + account_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /se5Hxz7PArQZOG3Nx2bpfOhLhtV.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 9806 + */ + id: number; + /** @example en */ + original_language?: string; + /** @example The Incredibles */ + original_title?: string; + /** @example Bob Parr has given up his superhero days to log in time as an insurance adjuster and raise his three children with his formerly heroic wife in suburbia. But when he receives a mysterious assignment, it's time to get back into costume. */ + overview?: string; + /** + * @default 0 + * @example 71.477 + */ + popularity: number; + /** @example /2LqaLgk4Z226KkgPJuiOQ58wvrm.jpg */ + poster_path?: string; + /** @example 2004-10-27 */ + release_date?: string; + /** @example The Incredibles */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 7.702 + */ + vote_average: number; + /** + * @default 0 + * @example 16162 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 4 + */ + total_pages: number; + /** + * @default 0 + * @example 80 + */ + total_results: number; + }; + }; + }; + }; + }; + 'account-favorite-tv': { + parameters: { + query?: { + language?: string; + page?: number; + session_id?: string; + sort_by?: 'created_at.asc' | 'created_at.desc'; + }; + header?: never; + path: { + account_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /bsNm9z2TJfe0WO3RedPGWQ8mG1X.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 1396 + */ + id: number; + origin_country?: string[]; + /** @example en */ + original_language?: string; + /** @example Breaking Bad */ + original_name?: string; + /** @example When Walter White, a New Mexico chemistry teacher, is diagnosed with Stage III cancer and given a prognosis of only two years left to live. He becomes filled with a sense of fearlessness and an unrelenting desire to secure his family's financial future at any cost as he enters the dangerous world of drugs and crime. */ + overview?: string; + /** + * @default 0 + * @example 292.904 + */ + popularity: number; + /** @example /ggFHVNu6YYI5L9pCfOacjizRGt.jpg */ + poster_path?: string; + /** @example 2008-01-20 */ + first_air_date?: string; + /** @example Breaking Bad */ + name?: string; + /** + * @default 0 + * @example 8.878 + */ + vote_average: number; + /** + * @default 0 + * @example 11548 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 4 + */ + total_pages: number; + /** + * @default 0 + * @example 68 + */ + total_results: number; + }; + }; + }; + }; + }; + 'account-lists': { + parameters: { + query?: { + page?: number; + session_id?: string; + }; + header?: never; + path: { + account_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** @example */ + description?: string; + /** + * @default 0 + * @example 0 + */ + favorite_count: number; + /** + * @default 0 + * @example 120174 + */ + id: number; + /** + * @default 0 + * @example 5 + */ + item_count: number; + /** @example en */ + iso_639_1?: string; + /** @example movie */ + list_type?: string; + /** @example Test Alpha Sort */ + name?: string; + poster_path?: unknown; + }[]; + /** + * @default 0 + * @example 2 + */ + total_pages: number; + /** + * @default 0 + * @example 25 + */ + total_results: number; + }; + }; + }; + }; + }; + 'account-rated-movies': { + parameters: { + query?: { + language?: string; + page?: number; + session_id?: string; + sort_by?: 'created_at.asc' | 'created_at.desc'; + }; + header?: never; + path: { + account_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /dUVbWINfRMGojGZRcO6GF1Z2nV8.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 120 + */ + id: number; + /** @example en */ + original_language?: string; + /** @example The Lord of the Rings: The Fellowship of the Ring */ + original_title?: string; + /** @example Young hobbit Frodo Baggins, after inheriting a mysterious ring from his uncle Bilbo, must leave his home in order to keep it from falling into the hands of its evil creator. Along the way, a fellowship is formed to protect the ringbearer and make sure that the ring arrives at its final destination: Mt. Doom, the only place where it can be destroyed. */ + overview?: string; + /** + * @default 0 + * @example 84.737 + */ + popularity: number; + /** @example /6oom5QYQ2yQTMJIbnvbkBL9cHo6.jpg */ + poster_path?: string; + /** @example 2001-12-18 */ + release_date?: string; + /** @example The Lord of the Rings: The Fellowship of the Ring */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 8.396 + */ + vote_average: number; + /** + * @default 0 + * @example 22579 + */ + vote_count: number; + /** + * @default 0 + * @example 8 + */ + rating: number; + }[]; + /** + * @default 0 + * @example 47 + */ + total_pages: number; + /** + * @default 0 + * @example 940 + */ + total_results: number; + }; + }; + }; + }; + }; + 'account-rated-tv': { + parameters: { + query?: { + language?: string; + page?: number; + session_id?: string; + sort_by?: 'created_at.asc' | 'created_at.desc'; + }; + header?: never; + path: { + account_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /2yZXtM2Kky1Sy0kachbDlwybl3y.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 1705 + */ + id: number; + origin_country?: string[]; + /** @example en */ + original_language?: string; + /** @example Fringe */ + original_name?: string; + /** @example FBI Special Agent Olivia Dunham, brilliant but formerly institutionalized scientist Walter Bishop and his scheming, reluctant son Peter uncover a deadly mystery involving a series of unbelievable events and realize they may be a part of a larger, more disturbing pattern that blurs the line between science fiction and technology. */ + overview?: string; + /** + * @default 0 + * @example 151.906 + */ + popularity: number; + /** @example /sY9hg5dLJ93RJOyKEiu1nAtBRND.jpg */ + poster_path?: string; + /** @example 2008-09-09 */ + first_air_date?: string; + /** @example Fringe */ + name?: string; + /** + * @default 0 + * @example 8.109 + */ + vote_average: number; + /** + * @default 0 + * @example 2050 + */ + vote_count: number; + /** + * @default 0 + * @example 9 + */ + rating: number; + }[]; + /** + * @default 0 + * @example 15 + */ + total_pages: number; + /** + * @default 0 + * @example 290 + */ + total_results: number; + }; + }; + }; + }; + }; + 'account-rated-tv-episodes': { + parameters: { + query?: { + language?: string; + page?: number; + session_id?: string; + sort_by?: 'created_at.asc' | 'created_at.desc'; + }; + header?: never; + path: { + account_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** @example 2013-10-17 */ + air_date?: string; + /** + * @default 0 + * @example 5 + */ + episode_number: number; + /** + * @default 0 + * @example 64782 + */ + id: number; + /** @example The Workplace Proximity */ + name?: string; + /** @example Amy starts working at Caltech which causes friction with Sheldon. Howard agrees with Sheldon who mentions this to Bernadette causing a big fight for the Wolowitzes. */ + overview?: string; + /** @example 4X5305 */ + production_code?: string; + /** + * @default 0 + * @example 22 + */ + runtime: number; + /** + * @default 0 + * @example 7 + */ + season_number: number; + /** + * @default 0 + * @example 1418 + */ + show_id: number; + /** @example /k8atjbd5gAsntuhbPnFpvnvo0qn.jpg */ + still_path?: string; + /** + * @default 0 + * @example 7.242 + */ + vote_average: number; + /** + * @default 0 + * @example 31 + */ + vote_count: number; + /** + * @default 0 + * @example 8 + */ + rating: number; + }[]; + /** + * @default 0 + * @example 10 + */ + total_pages: number; + /** + * @default 0 + * @example 186 + */ + total_results: number; + }; + }; + }; + }; + }; + 'account-watchlist-movies': { + parameters: { + query?: { + language?: string; + page?: number; + session_id?: string; + sort_by?: 'created_at.asc' | 'created_at.desc'; + }; + header?: never; + path: { + account_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /rgNzvSagnlc32TuMEBa529QFIig.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 76726 + */ + id: number; + /** @example en */ + original_language?: string; + /** @example Chronicle */ + original_title?: string; + /** @example Three high school students make an incredible discovery, leading to their developing uncanny powers beyond their understanding. As they learn to control their abilities and use them to their advantage, their lives start to spin out of control, and their darker sides begin to take over. */ + overview?: string; + /** + * @default 0 + * @example 37.148 + */ + popularity: number; + /** @example /xENglsVIIWEEhhB5lgpy33tGcKI.jpg */ + poster_path?: string; + /** @example 2012-02-01 */ + release_date?: string; + /** @example Chronicle */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 6.822 + */ + vote_average: number; + /** + * @default 0 + * @example 4741 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 34 + */ + total_pages: number; + /** + * @default 0 + * @example 677 + */ + total_results: number; + }; + }; + }; + }; + }; + 'account-watchlist-tv': { + parameters: { + query?: { + language?: string; + page?: number; + session_id?: string; + sort_by?: 'created_at.asc' | 'created_at.desc'; + }; + header?: never; + path: { + account_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /7phlGHRupo38EnuwmkAHdNUqov3.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 58932 + */ + id: number; + origin_country?: string[]; + /** @example en */ + original_language?: string; + /** @example The Crazy Ones */ + original_name?: string; + /** @example The Crazy Ones is an American situation comedy series created by David E. Kelley that stars Robin Williams and Sarah Michelle Gellar. The single-camera project premiered on CBS on September 26, 2013, as part of the 2013–14 American television season as a Thursday night 9 pm entry. Bill D'Elia, Dean Lorey, Jason Winer, John Montgomery and Mark Teitelbaum serve as executive producers for 20th Century Fox Television. */ + overview?: string; + /** + * @default 0 + * @example 8.939 + */ + popularity: number; + /** @example /s2e7hTrdmNUaJDf0yDP5b4AHvrD.jpg */ + poster_path?: string; + /** @example 2013-09-26 */ + first_air_date?: string; + /** @example The Crazy Ones */ + name?: string; + /** + * @default 0 + * @example 6.176 + */ + vote_average: number; + /** + * @default 0 + * @example 94 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 17 + */ + total_pages: number; + /** + * @default 0 + * @example 325 + */ + total_results: number; + }; + }; + }; + }; + }; + 'authentication-create-guest-session': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default true + * @example true + */ + success: boolean; + /** @example 1ce82ec1223641636ad4a60b07de3581 */ + guest_session_id?: string; + /** @example 2016-08-27 16:26:40 UTC */ + expires_at?: string; + }; + }; + }; + }; + }; + 'authentication-create-request-token': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default true + * @example true + */ + success: boolean; + /** @example 2016-08-26 17:04:39 UTC */ + expires_at?: string; + /** @example ff5c7eeb5a8870efe3cd7fc5c282cffd26800ecd */ + request_token?: string; + }; + }; + }; + }; + }; + 'authentication-create-session': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + 'application/json': { + /** Format: json */ + RAW_BODY: string; + }; + }; + }; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default true + * @example true + */ + success: boolean; + /** @example 79191836ddaa0da3df76a5ffef6f07ad6ab0c641 */ + session_id?: string; + }; + }; + }; + }; + }; + 'authentication-create-session-from-v4-token': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + 'application/json': { + /** Format: json */ + RAW_BODY: string; + }; + }; + }; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default true + * @example true + */ + success: boolean; + /** @example 2629f70fb498edc263a0adb99118ac41f0053e8c */ + session_id?: string; + }; + }; + }; + }; + }; + 'authentication-create-session-from-login': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + 'application/json': { + /** Format: json */ + RAW_BODY: string; + }; + }; + }; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default true + * @example true + */ + success: boolean; + /** @example 2018-07-24 04:10:26 UTC */ + expires_at?: string; + /** @example 1531f1a558c8357ce8990cf887ff196e8f5402ec */ + request_token?: string; + }; + }; + }; + }; + }; + 'authentication-delete-session': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + 'application/json': { + /** Format: json */ + RAW_BODY: string; + }; + }; + }; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default true + * @example true + */ + success: boolean; + }; + }; + }; + }; + }; + 'certification-movie-list': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + certifications?: { + AU?: { + /** @example E */ + certification?: string; + /** @example Exempt from classification. Films that are exempt from classification must not contain contentious material (i.e. material that would ordinarily be rated M or higher). */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + BG?: { + /** @example D */ + certification?: string; + /** @example Prohibited for persons under 16. */ + meaning?: string; + /** + * @default 0 + * @example 4 + */ + order: number; + }[]; + BR?: { + /** @example 14 */ + certification?: string; + /** @example Not recommended for minors under fourteen. More violent material, stronger sex references and/or nudity. */ + meaning?: string; + /** + * @default 0 + * @example 4 + */ + order: number; + }[]; + CA?: { + /** @example G */ + certification?: string; + /** @example All ages. */ + meaning?: string; + /** + * @default 0 + * @example 2 + */ + order: number; + }[]; + 'CA-QC'?: { + /** @example NR */ + certification?: string; + /** @example No rating information. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + DE?: { + /** @example 12 */ + certification?: string; + /** @example Children 12 or older admitted, children between 6 and 11 only when accompanied by parent or a legal guardian. */ + meaning?: string; + /** + * @default 0 + * @example 3 + */ + order: number; + }[]; + DK?: { + /** @example NR */ + certification?: string; + /** @example No rating information. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + ES?: { + /** @example A */ + certification?: string; + /** @example General admission. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + FI?: { + /** @example K-16 */ + certification?: string; + /** @example Over 16 years. */ + meaning?: string; + /** + * @default 0 + * @example 4 + */ + order: number; + }[]; + FR?: { + /** @example TP */ + certification?: string; + /** @example Valid for all audiences. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + GB?: { + /** @example 15 */ + certification?: string; + /** @example Only those over 15 years are admitted. Nobody younger than 15 can rent or buy a 15-rated VHS, DVD, Blu-ray Disc, UMD or game, or watch a film in the cinema with this rating. Films under this category can contain adult themes, hard drugs, frequent strong language and limited use of very strong language, strong violence and strong sex references, and nudity without graphic detail. Sexual activity may be portrayed but without any strong detail. Sexual violence may be shown if discreet and justified by context. */ + meaning?: string; + /** + * @default 0 + * @example 5 + */ + order: number; + }[]; + HU?: { + /** @example 6 */ + certification?: string; + /** @example Not recommended below age of 6. */ + meaning?: string; + /** + * @default 0 + * @example 2 + */ + order: number; + }[]; + IN?: { + /** @example U */ + certification?: string; + /** @example Unrestricted Public Exhibition throughout India, suitable for all age groups. Films under this category should not upset children over 4. Such films may contain educational, social or family-oriented themes. Films under this category may also contain fantasy violence and/or mild bad language. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + IT?: { + /** @example NR */ + certification?: string; + /** @example No rating information. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + LT?: { + /** @example NR */ + certification?: string; + /** @example No rating information. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + MY?: { + /** @example NR */ + certification?: string; + /** @example No rating information. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + NL?: { + /** @example AL */ + certification?: string; + /** @example All ages. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + NO?: { + /** @example 6 */ + certification?: string; + /** @example 6 years (no restriction for children accompanied by an adult). */ + meaning?: string; + /** + * @default 0 + * @example 2 + */ + order: number; + }[]; + NZ?: { + /** @example G */ + certification?: string; + /** @example Suitable for general audiences. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + PH?: { + /** @example NR */ + certification?: string; + /** @example No rating information. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + PT?: { + /** @example Públicos */ + certification?: string; + /** @example For all the public (especially designed for children under 3 years of age). */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + RU?: { + /** @example 6+ */ + certification?: string; + /** @example (For children above 6) – Unsuitable for children under 6. */ + meaning?: string; + /** + * @default 0 + * @example 2 + */ + order: number; + }[]; + SE?: { + /** @example 11 */ + certification?: string; + /** @example Children over the age of 7, who are accompanied by an adult, are admitted to films that have been passed for children from the age of 11. */ + meaning?: string; + /** + * @default 0 + * @example 3 + */ + order: number; + }[]; + US?: { + /** @example R */ + certification?: string; + /** @example Under 17 requires accompanying parent or adult guardian 21 or older. The parent/guardian is required to stay with the child under 17 through the entire movie, even if the parent gives the child/teenager permission to see the film alone. These films may contain strong profanity, graphic sexuality, nudity, strong violence, horror, gore, and strong drug use. A movie rated R for profanity often has more severe or frequent language than the PG-13 rating would permit. An R-rated movie may have more blood, gore, drug use, nudity, or graphic sexuality than a PG-13 movie would admit. */ + meaning?: string; + /** + * @default 0 + * @example 4 + */ + order: number; + }[]; + KR?: { + /** @example All */ + certification?: string; + /** @example Film suitable for all ages. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + SK?: { + /** @example U */ + certification?: string; + /** @example General audience. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + TH?: { + /** @example P */ + certification?: string; + /** @example Educational. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + MX?: { + /** @example AA */ + certification?: string; + /** @example Informative-only rating: Understandable for children under 7 years. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + ID?: { + /** @example SU */ + certification?: string; + /** @example All ages. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + TR?: { + /** @example Genel İzleyici Kitlesi */ + certification?: string; + /** @example General audience. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + AR?: { + /** @example ATP */ + certification?: string; + /** @example For all public. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + GR?: { + /** @example K */ + certification?: string; + /** @example No restrictions. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + TW?: { + /** @example 0+ */ + certification?: string; + /** @example Viewing is permitted for audiences of all ages. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + ZA?: { + /** @example A */ + certification?: string; + /** @example Suitable for all. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + SG?: { + /** @example G */ + certification?: string; + /** @example Suitable for all ages. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + IE?: { + /** @example G */ + certification?: string; + /** @example Suitable for children of school going age (note: children can be enrolled in school from the age of 4). */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + PR?: { + /** @example G */ + certification?: string; + /** @example */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + JP?: { + /** @example G */ + certification?: string; + /** @example General, suitable for all ages. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + VI?: { + /** @example G */ + certification?: string; + /** @example All ages admitted. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + CH?: { + /** @example 0 */ + certification?: string; + /** @example */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + IL?: { + /** @example All */ + certification?: string; + /** @example */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + HK?: { + /** @example I */ + certification?: string; + /** @example */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + MO?: { + /** @example A */ + certification?: string; + /** @example */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + LV?: { + /** @example U */ + certification?: string; + /** @example */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + LU?: { + /** @example EA */ + certification?: string; + /** @example */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + }; + }; + }; + }; + }; + }; + 'certifications-tv-list': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + certifications?: { + AU?: { + /** @example P */ + certification?: string; + /** @example Programming is intended for younger children 2–11; commercial stations must show at least 30 minutes of P-rated content each weekday and weekends at all times. No advertisements may be shown during P-rated programs. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + BR?: { + /** @example 14 */ + certification?: string; + /** @example Content suitable for viewers over the age of 14. */ + meaning?: string; + /** + * @default 0 + * @example 3 + */ + order: number; + }[]; + CA?: { + /** @example Exempt */ + certification?: string; + /** @example Shows which are exempt from ratings (such as news and sports programming) will not display an on-screen rating at all. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + 'CA-QC'?: { + /** @example 18+ */ + certification?: string; + /** @example Only to be viewed by adults and may contain extreme violence and graphic sexual content. It is mostly used for 18+ movies and pornography. */ + meaning?: string; + /** + * @default 0 + * @example 5 + */ + order: number; + }[]; + DE?: { + /** @example 0 */ + certification?: string; + /** @example Can be aired at any time. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + ES?: { + /** @example NR */ + certification?: string; + /** @example No rating information. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + FR?: { + /** @example NR */ + certification?: string; + /** @example No rating information. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + GB?: { + /** @example U */ + certification?: string; + /** @example The U symbol stands for Universal. A U film should be suitable for audiences aged four years and over. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + HU?: { + /** @example Unrated */ + certification?: string; + /** @example Without age restriction. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + KR?: { + /** @example Exempt */ + certification?: string; + /** @example This rating is only for knowledge based game shows; lifestyle shows; documentary shows; news; current topic discussion shows; education/culture shows; sports that excludes MMA or other violent sports; and other programs that Korea Communications Standards Commission recognizes. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + LT?: { + /** @example S */ + certification?: string; + /** @example Intended for adult viewers from the age of 18 (corresponding to the age-appropriate index N-18) and broadcast between 23 (11pm) and 6 (6am) hours; Limited to minors and intended for adult audiences. */ + meaning?: string; + /** + * @default 0 + * @example 3 + */ + order: number; + }[]; + NL?: { + /** @example NR */ + certification?: string; + /** @example No rating information. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + PH?: { + /** @example NR */ + certification?: string; + /** @example No rating information. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + PT?: { + /** @example 12AP */ + certification?: string; + /** @example Acompanhamento Parental (may not be suitable for children under 12, parental guidance advised). */ + meaning?: string; + /** + * @default 0 + * @example 3 + */ + order: number; + }[]; + RU?: { + /** @example 16+ */ + certification?: string; + /** @example Only teens the age of 16 or older can watch. */ + meaning?: string; + /** + * @default 0 + * @example 4 + */ + order: number; + }[]; + SK?: { + /** @example NR */ + certification?: string; + /** @example No rating information. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + TH?: { + /** @example ส */ + certification?: string; + /** @example Sor - Educational movies which the public should be encouraged to see. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + US?: { + /** @example TV-MA */ + certification?: string; + /** @example This program is specifically designed to be viewed by adults and therefore may be unsuitable for children under 17. */ + meaning?: string; + /** + * @default 0 + * @example 6 + */ + order: number; + }[]; + IT?: { + /** @example T */ + certification?: string; + /** @example All ages admitted. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + FI?: { + /** @example S */ + certification?: string; + /** @example Allowed at all times. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + MY?: { + /** @example U */ + certification?: string; + /** @example No age limit. Can be broadcast anytime. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + NZ?: { + /** @example G */ + certification?: string; + /** @example Approved for general viewing. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + NO?: { + /** @example A */ + certification?: string; + /** @example Allowed at all times. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + BG?: { + /** @example Unrated */ + certification?: string; + /** @example Can be viewed for each age. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + MX?: { + /** @example AA */ + certification?: string; + /** @example Aimed at children (can be broadcast anytime). */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + IN?: { + /** @example U */ + certification?: string; + /** @example Viewable for all ages. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + DK?: { + /** @example A */ + certification?: string; + /** @example Suitable for a general audience. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + SE?: { + /** @example Btl */ + certification?: string; + /** @example */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + ID?: { + /** @example SU */ + certification?: string; + /** @example Suitable for general audiences over the age of 2 years. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + TR?: { + /** @example Genel İzleyici */ + certification?: string; + /** @example General audience. Suitable for all ages. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + AR?: { + /** @example ATP */ + certification?: string; + /** @example Suitable for all audiences. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + PL?: { + /** @example 0 */ + certification?: string; + /** @example Positive or neutral view of the world, little to no violence, non-sexual love, and no sexual content. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + MA?: { + /** @example NR */ + certification?: string; + /** @example All audiences. */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + GR?: { + /** @example K */ + certification?: string; + /** @example Suitable for all ages. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + IL?: { + /** @example E */ + certification?: string; + /** @example Exempt from classification. This rating is usually applied to live broadcasts. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + TW?: { + /** @example 0+ */ + certification?: string; + /** @example Suitable for watching by general audiences. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + ZA?: { + /** @example All */ + certification?: string; + /** @example This is a programme/film that does not contain any obscenity, and is suitable for family viewing. A logo must be displayed in the corner of the screen for 30 seconds after each commercial break. */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + SG?: { + /** @example G */ + certification?: string; + /** @example */ + meaning?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + }[]; + PR?: { + /** @example NR */ + certification?: string; + /** @example */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + VI?: { + /** @example NR */ + certification?: string; + /** @example */ + meaning?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + }; + }; + }; + }; + }; + }; + 'changes-movie-list': { + parameters: { + query?: { + end_date?: string; + page?: number; + start_date?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + results?: { + /** + * @default 0 + * @example 1120293 + */ + id: number; + /** + * @default true + * @example false + */ + adult: boolean; + }[]; + /** + * @default 0 + * @example 3 + */ + page: number; + /** + * @default 0 + * @example 57 + */ + total_pages: number; + /** + * @default 0 + * @example 5700 + */ + total_results: number; + }; + }; + }; + }; + }; + 'changes-people-list': { + parameters: { + query?: { + end_date?: string; + page?: number; + start_date?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + results?: { + /** + * @default 0 + * @example 4037513 + */ + id: number; + /** + * @default true + * @example false + */ + adult: boolean; + }[]; + /** + * @default 0 + * @example 1 + */ + page: number; + /** + * @default 0 + * @example 53 + */ + total_pages: number; + /** + * @default 0 + * @example 5292 + */ + total_results: number; + }; + }; + }; + }; + }; + 'changes-tv-list': { + parameters: { + query?: { + end_date?: string; + page?: number; + start_date?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + results?: { + /** + * @default 0 + * @example 225591 + */ + id: number; + /** + * @default true + * @example false + */ + adult: boolean; + }[]; + /** + * @default 0 + * @example 1 + */ + page: number; + /** + * @default 0 + * @example 18 + */ + total_pages: number; + /** + * @default 0 + * @example 1763 + */ + total_results: number; + }; + }; + }; + }; + }; + 'collection-details': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path: { + collection_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 10 + */ + id: number; + /** @example Star Wars Collection */ + name?: string; + /** @example en */ + original_language?: string; + /** @example Star Wars Collection */ + original_name?: string; + /** @example An epic space-opera theatrical film series, which depicts the adventures of various characters "a long time ago in a galaxy far, far away…." */ + overview?: string; + /** @example /22dj38IckjzEEUZwN1tPU5VJ1qq.jpg */ + poster_path?: string; + /** @example /4z9ijhgEthfRHShoOvMaBlpciXS.jpg */ + backdrop_path?: string; + parts?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /2w4xG178RpB4MDAIfTkqAuSJzec.jpg */ + backdrop_path?: string; + /** + * @default 0 + * @example 11 + */ + id: number; + /** @example Star Wars */ + name?: string; + /** @example Star Wars */ + original_name?: string; + /** @example Princess Leia is captured and held hostage by the evil Imperial forces in their effort to take over the galactic Empire. Venturesome Luke Skywalker and dashing captain Han Solo team together with the loveable robot duo R2-D2 and C-3PO to rescue the beautiful princess and restore peace and justice in the Empire. */ + overview?: string; + /** @example /6FfCtAuVAW8XJjZ7eWeLibRLWTw.jpg */ + poster_path?: string; + /** @example movie */ + media_type?: string; + /** @example en */ + original_language?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 15.8557 + */ + popularity: number; + /** @example 1977-05-25 */ + release_date?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 8.205 + */ + vote_average: number; + /** + * @default 0 + * @example 21522 + */ + vote_count: number; + }[]; + }; + }; + }; + }; + }; + 'collection-images': { + parameters: { + query?: { + /** @description specify a comma separated list of ISO-639-1 values to query, for example: `en-US,null` */ + include_image_language?: string; + language?: string; + }; + header?: never; + path: { + collection_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 10 + */ + id: number; + backdrops?: { + /** + * @default 0 + * @example 1.778 + */ + aspect_ratio: number; + /** + * @default 0 + * @example 1080 + */ + height: number; + iso_639_1?: unknown; + /** @example /d8duYyyC9J5T825Hg7grmaabfxQ.jpg */ + file_path?: string; + /** + * @default 0 + * @example 5.464 + */ + vote_average: number; + /** + * @default 0 + * @example 30 + */ + vote_count: number; + /** + * @default 0 + * @example 1920 + */ + width: number; + }[]; + posters?: { + /** + * @default 0 + * @example 0.667 + */ + aspect_ratio: number; + /** + * @default 0 + * @example 3000 + */ + height: number; + /** @example en */ + iso_639_1?: string; + /** @example /r8Ph5MYXL04Qzu4QBbq2KjqwtkQ.jpg */ + file_path?: string; + /** + * @default 0 + * @example 5.516 + */ + vote_average: number; + /** + * @default 0 + * @example 14 + */ + vote_count: number; + /** + * @default 0 + * @example 2000 + */ + width: number; + }[]; + }; + }; + }; + }; + }; + 'collection-translations': { + parameters: { + query?: never; + header?: never; + path: { + collection_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 10 + */ + id: number; + translations?: { + /** @example AE */ + iso_3166_1?: string; + /** @example ar */ + iso_639_1?: string; + /** @example العربية */ + name?: string; + /** @example Arabic */ + english_name?: string; + data?: { + /** @example */ + title?: string; + /** @example */ + overview?: string; + /** @example */ + homepage?: string; + }; + }[]; + }; + }; + }; + }; + }; + 'company-details': { + parameters: { + query?: never; + header?: never; + path: { + company_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** @example */ + description?: string; + /** @example San Francisco, California */ + headquarters?: string; + /** @example https://www.lucasfilm.com */ + homepage?: string; + /** + * @default 0 + * @example 1 + */ + id: number; + /** @example /o86DbpburjxrqAzEDhXZcyE8pDb.png */ + logo_path?: string; + /** @example Lucasfilm Ltd. */ + name?: string; + /** @example US */ + origin_country?: string; + parent_company?: unknown; + }; + }; + }; + }; + }; + 'company-alternative-names': { + parameters: { + query?: never; + header?: never; + path: { + company_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + id: number; + results?: { + /** @example 루카스필름 */ + name?: string; + /** @example */ + type?: string; + }[]; + }; + }; + }; + }; + }; + 'company-images': { + parameters: { + query?: never; + header?: never; + path: { + company_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + id: number; + logos?: { + /** + * @default 0 + * @example 2.97979797979798 + */ + aspect_ratio: number; + /** @example /o86DbpburjxrqAzEDhXZcyE8pDb.png */ + file_path?: string; + /** + * @default 0 + * @example 99 + */ + height: number; + /** @example 5aa080d6c3a3683fea00011e */ + id?: string; + /** @example .svg */ + file_type?: string; + /** + * @default 0 + * @example 5.384 + */ + vote_average: number; + /** + * @default 0 + * @example 2 + */ + vote_count: number; + /** + * @default 0 + * @example 295 + */ + width: number; + }[]; + }; + }; + }; + }; + }; + 'configuration-details': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + images?: { + /** @example http://image.tmdb.org/t/p/ */ + base_url?: string; + /** @example https://image.tmdb.org/t/p/ */ + secure_base_url?: string; + backdrop_sizes?: string[]; + logo_sizes?: string[]; + poster_sizes?: string[]; + profile_sizes?: string[]; + still_sizes?: string[]; + }; + change_keys?: string[]; + }; + }; + }; + }; + }; + 'configuration-countries': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** @example AD */ + iso_3166_1?: string; + /** @example Andorra */ + english_name?: string; + /** @example Andorra */ + native_name?: string; + }[]; + }; + }; + }; + }; + 'configuration-jobs': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** @example Production */ + department?: string; + jobs?: string[]; + }[]; + }; + }; + }; + }; + 'configuration-languages': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** @example bi */ + iso_639_1?: string; + /** @example Bislama */ + english_name?: string; + /** @example */ + name?: string; + }[]; + }; + }; + }; + }; + 'configuration-primary-translations': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': string[]; + }; + }; + }; + }; + 'configuration-timezones': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** @example AD */ + iso_3166_1?: string; + zones?: string[]; + }[]; + }; + }; + }; + }; + 'credit-details': { + parameters: { + query?: never; + header?: never; + path: { + credit_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** @example cast */ + credit_type?: string; + /** @example Acting */ + department?: string; + /** @example Actor */ + job?: string; + media?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /uDgy6hyPd82kOHh6I95FLtLnj6p.jpg */ + backdrop_path?: string; + /** + * @default 0 + * @example 100088 + */ + id: number; + /** @example The Last of Us */ + name?: string; + /** @example en */ + original_language?: string; + /** @example The Last of Us */ + original_name?: string; + /** @example Zwanzig Jahre nachdem die moderne Zivilisation zerstört wurde. – Joel, ein abgehärteter Überlebender, wird angeheuert, um Ellie, ein 14-jähriges Mädchen, aus einer bedrückenden Quarantänezone zu schmuggeln. Was als kleiner Job beginnt, wird bald zu einer brutalen, herzzerreißenden Reise, bei der die beiden die USA durchqueren müssen und aufeinander angewiesen sind, um zu überleben. */ + overview?: string; + /** @example /igwIPNClQpGVzb61QlGqcpT5zUy.jpg */ + poster_path?: string; + /** @example tv */ + media_type?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 898.378 + */ + popularity: number; + /** @example 2023-01-15 */ + first_air_date?: string; + /** + * @default 0 + * @example 8.749 + */ + vote_average: number; + /** + * @default 0 + * @example 3341 + */ + vote_count: number; + origin_country?: string[]; + /** @example Joel Miller */ + character?: string; + episodes?: unknown[]; + seasons?: { + /** @example 2023-01-15 */ + air_date?: string; + /** + * @default 0 + * @example 9 + */ + episode_count: number; + /** + * @default 0 + * @example 144593 + */ + id: number; + /** @example Staffel 1 */ + name?: string; + /** @example Die 1. Staffel der Endzeit-Horrorserie The Last of Us feierte ihre Premiere am 15. Januar 2023 bei HBO. In Staffel 1 beginnt für den Überlebenden Joel und das Mädchen Ellie eine Reise durch das postapokalyptische Amerika, in dem Plünderer und mutierte Wesen ihnen nach dem Leben trachten. */ + overview?: string; + /** @example /aUQKIpZZ31KWbpdHMCmaV76u78T.jpg */ + poster_path?: string; + /** + * @default 0 + * @example 1 + */ + season_number: number; + /** + * @default 0 + * @example 100088 + */ + show_id: number; + }[]; + }; + /** @example tv */ + media_type?: string; + /** @example 6024a814c0ae36003d59cc3c */ + id?: string; + person?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 1253360 + */ + id: number; + /** @example Pedro Pascal */ + name?: string; + /** @example Pedro Pascal */ + original_name?: string; + /** @example person */ + media_type?: string; + /** + * @default 0 + * @example 106.095 + */ + popularity: number; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** @example Acting */ + known_for_department?: string; + /** @example /dBOrm29cr7NUrjiDQMTtrTyDpfy.jpg */ + profile_path?: string; + }; + }; + }; + }; + }; + }; + 'discover-movie': { + parameters: { + query?: { + /** @description use in conjunction with `region` */ + certification?: string; + /** @description use in conjunction with `region` */ + 'certification.gte'?: string; + /** @description use in conjunction with `region` */ + 'certification.lte'?: string; + /** @description use in conjunction with the `certification`, `certification.gte` and `certification.lte` filters */ + certification_country?: string; + include_adult?: boolean; + include_video?: boolean; + language?: string; + page?: number; + primary_release_year?: number; + 'primary_release_date.gte'?: string; + 'primary_release_date.lte'?: string; + region?: string; + 'release_date.gte'?: string; + 'release_date.lte'?: string; + sort_by?: + | 'original_title.asc' + | 'original_title.desc' + | 'popularity.asc' + | 'popularity.desc' + | 'revenue.asc' + | 'revenue.desc' + | 'primary_release_date.asc' + | 'title.asc' + | 'title.desc' + | 'primary_release_date.desc' + | 'vote_average.asc' + | 'vote_average.desc' + | 'vote_count.asc' + | 'vote_count.desc'; + 'vote_average.gte'?: number; + 'vote_average.lte'?: number; + 'vote_count.gte'?: number; + 'vote_count.lte'?: number; + /** @description use in conjunction with `with_watch_monetization_types ` or `with_watch_providers ` */ + watch_region?: string; + /** @description can be a comma (`AND`) or pipe (`OR`) separated query */ + with_cast?: string; + /** @description can be a comma (`AND`) or pipe (`OR`) separated query */ + with_companies?: string; + /** @description can be a comma (`AND`) or pipe (`OR`) separated query */ + with_crew?: string; + /** @description can be a comma (`AND`) or pipe (`OR`) separated query */ + with_genres?: string; + /** @description can be a comma (`AND`) or pipe (`OR`) separated query */ + with_keywords?: string; + with_origin_country?: string; + with_original_language?: string; + /** @description can be a comma (`AND`) or pipe (`OR`) separated query */ + with_people?: string; + /** @description possible values are: [1, 2, 3, 4, 5, 6] can be a comma (`AND`) or pipe (`OR`) separated query, can be used in conjunction with `region` */ + with_release_type?: number; + 'with_runtime.gte'?: number; + 'with_runtime.lte'?: number; + /** @description possible values are: [flatrate, free, ads, rent, buy] use in conjunction with `watch_region`, can be a comma (`AND`) or pipe (`OR`) separated query */ + with_watch_monetization_types?: string; + /** @description use in conjunction with `watch_region`, can be a comma (`AND`) or pipe (`OR`) separated query */ + with_watch_providers?: string; + without_companies?: string; + without_genres?: string; + without_keywords?: string; + without_watch_providers?: string; + year?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /8YFL5QQVPy3AgrEQxNYVSgiPEbe.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 640146 + */ + id: number; + /** @example en */ + original_language?: string; + /** @example Ant-Man and the Wasp: Quantumania */ + original_title?: string; + /** @example Super-Hero partners Scott Lang and Hope van Dyne, along with with Hope's parents Janet van Dyne and Hank Pym, and Scott's daughter Cassie Lang, find themselves exploring the Quantum Realm, interacting with strange new creatures and embarking on an adventure that will push them beyond the limits of what they thought possible. */ + overview?: string; + /** + * @default 0 + * @example 9272.643 + */ + popularity: number; + /** @example /ngl2FKBlU4fhbdsrtdom9LVLBXw.jpg */ + poster_path?: string; + /** @example 2023-02-15 */ + release_date?: string; + /** @example Ant-Man and the Wasp: Quantumania */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 6.5 + */ + vote_average: number; + /** + * @default 0 + * @example 1856 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 38020 + */ + total_pages: number; + /** + * @default 0 + * @example 760385 + */ + total_results: number; + }; + }; + }; + }; + }; + 'discover-tv': { + parameters: { + query?: { + 'air_date.gte'?: string; + 'air_date.lte'?: string; + first_air_date_year?: number; + 'first_air_date.gte'?: string; + 'first_air_date.lte'?: string; + include_adult?: boolean; + include_null_first_air_dates?: boolean; + language?: string; + page?: number; + screened_theatrically?: boolean; + sort_by?: + | 'first_air_date.asc' + | 'first_air_date.desc' + | 'name.asc' + | 'name.desc' + | 'original_name.asc' + | 'original_name.desc' + | 'popularity.asc' + | 'popularity.desc' + | 'vote_average.asc' + | 'vote_average.desc' + | 'vote_count.asc' + | 'vote_count.desc'; + timezone?: string; + 'vote_average.gte'?: number; + 'vote_average.lte'?: number; + 'vote_count.gte'?: number; + 'vote_count.lte'?: number; + /** @description use in conjunction with `with_watch_monetization_types ` or `with_watch_providers ` */ + watch_region?: string; + /** @description can be a comma (`AND`) or pipe (`OR`) separated query */ + with_companies?: string; + /** @description can be a comma (`AND`) or pipe (`OR`) separated query */ + with_genres?: string; + /** @description can be a comma (`AND`) or pipe (`OR`) separated query */ + with_keywords?: string; + with_networks?: number; + with_origin_country?: string; + with_original_language?: string; + 'with_runtime.gte'?: number; + 'with_runtime.lte'?: number; + /** @description possible values are: [0, 1, 2, 3, 4, 5], can be a comma (`AND`) or pipe (`OR`) separated query */ + with_status?: string; + /** @description possible values are: [flatrate, free, ads, rent, buy] use in conjunction with `watch_region`, can be a comma (`AND`) or pipe (`OR`) separated query */ + with_watch_monetization_types?: string; + /** @description use in conjunction with `watch_region`, can be a comma (`AND`) or pipe (`OR`) separated query */ + with_watch_providers?: string; + without_companies?: string; + without_genres?: string; + without_keywords?: string; + without_watch_providers?: string; + /** @description possible values are: [0, 1, 2, 3, 4, 5, 6], can be a comma (`AND`) or pipe (`OR`) separated query */ + with_type?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** @example /mAJ84W6I8I272Da87qplS2Dp9ST.jpg */ + backdrop_path?: string; + /** @example 2023-01-23 */ + first_air_date?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 202250 + */ + id: number; + /** @example Dirty Linen */ + name?: string; + origin_country?: string[]; + /** @example tl */ + original_language?: string; + /** @example Dirty Linen */ + original_name?: string; + /** @example To exact vengeance, a young woman infiltrates the household of an influential family as a housemaid to expose their dirty secrets. However, love will get in the way of her revenge plot. */ + overview?: string; + /** + * @default 0 + * @example 2684.061 + */ + popularity: number; + /** @example /ujlkQtHAVShWyWTloGU2Vh5Jbo9.jpg */ + poster_path?: string; + /** + * @default 0 + * @example 5 + */ + vote_average: number; + /** + * @default 0 + * @example 13 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 7414 + */ + total_pages: number; + /** + * @default 0 + * @example 148265 + */ + total_results: number; + }; + }; + }; + }; + }; + 'find-by-id': { + parameters: { + query: { + external_source: '' | 'imdb_id' | 'facebook_id' | 'instagram_id' | 'tvdb_id' | 'tiktok_id' | 'twitter_id' | 'wikidata_id' | 'youtube_id'; + language?: string; + }; + header?: never; + path: { + external_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + movie_results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /44immBwzhDVyjn87b3x3l9mlhAD.jpg */ + backdrop_path?: string; + /** + * @default 0 + * @example 934433 + */ + id: number; + /** @example Scream VI */ + title?: string; + /** @example en */ + original_language?: string; + /** @example Scream VI */ + original_title?: string; + /** @example Following the latest Ghostface killings, the four survivors leave Woodsboro behind and start a fresh chapter. */ + overview?: string; + /** @example /wDWwtvkRRlgTiUr6TyLSMX8FCuZ.jpg */ + poster_path?: string; + /** @example movie */ + media_type?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 853.917 + */ + popularity: number; + /** @example 2023-03-08 */ + release_date?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 7.388 + */ + vote_average: number; + /** + * @default 0 + * @example 708 + */ + vote_count: number; + }[]; + person_results?: unknown[]; + tv_results?: unknown[]; + tv_episode_results?: unknown[]; + tv_season_results?: unknown[]; + }; + }; + }; + }; + }; + 'genre-movie-list': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + genres?: { + /** + * @default 0 + * @example 28 + */ + id: number; + /** @example Action */ + name?: string; + }[]; + }; + }; + }; + }; + }; + 'genre-tv-list': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + genres?: { + /** + * @default 0 + * @example 10759 + */ + id: number; + /** @example Action & Adventure */ + name?: string; + }[]; + }; + }; + }; + }; + }; + 'guest-session-rated-movies': { + parameters: { + query?: { + language?: string; + page?: number; + sort_by?: 'created_at.asc' | 'created_at.desc'; + }; + header?: never; + path: { + guest_session_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /ikR2qy9xJCHX7M8i5rcvuNfdYXs.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 16 + */ + id: number; + /** @example en */ + original_language?: string; + /** @example Dancer in the Dark */ + original_title?: string; + /** @example Selma, a Czech immigrant on the verge of blindness, struggles to make ends meet for herself and her son, who has inherited the same genetic disorder and will suffer the same fate without an expensive operation. When life gets too difficult, Selma learns to cope through her love of musicals, escaping life's troubles - even if just for a moment - by dreaming up little numbers to the rhythmic beats of her surroundings. */ + overview?: string; + /** + * @default 0 + * @example 14.684 + */ + popularity: number; + /** @example /8Wdd3fQfbbQeoSfWpHrDfaFNhBU.jpg */ + poster_path?: string; + /** @example 2000-06-30 */ + release_date?: string; + /** @example Dancer in the Dark */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 7.885 + */ + vote_average: number; + /** + * @default 0 + * @example 1549 + */ + vote_count: number; + /** + * @default 0 + * @example 8.5 + */ + rating: number; + }[]; + /** + * @default 0 + * @example 1 + */ + total_pages: number; + /** + * @default 0 + * @example 1 + */ + total_results: number; + }; + }; + }; + }; + }; + 'guest-session-rated-tv': { + parameters: { + query?: { + language?: string; + page?: number; + sort_by?: 'created_at.asc' | 'created_at.desc'; + }; + header?: never; + path: { + guest_session_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /2OMB0ynKlyIenMJWI2Dy9IWT4c.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 1399 + */ + id: number; + origin_country?: string[]; + /** @example en */ + original_language?: string; + /** @example Game of Thrones */ + original_name?: string; + /** @example Seven noble families fight for control of the mythical land of Westeros. Friction between the houses leads to full-scale war. All while a very ancient evil awakens in the farthest north. Amidst the war, a neglected military order of misfits, the Night's Watch, is all that stands between the realms of men and icy horrors beyond. */ + overview?: string; + /** + * @default 0 + * @example 404.299 + */ + popularity: number; + /** @example /7WUHnWGx5OO145IRxPDUkQSh4C7.jpg */ + poster_path?: string; + /** @example 2011-04-17 */ + first_air_date?: string; + /** @example Game of Thrones */ + name?: string; + /** + * @default 0 + * @example 8.436 + */ + vote_average: number; + /** + * @default 0 + * @example 21025 + */ + vote_count: number; + /** + * @default 0 + * @example 8.5 + */ + rating: number; + }[]; + /** + * @default 0 + * @example 1 + */ + total_pages: number; + /** + * @default 0 + * @example 1 + */ + total_results: number; + }; + }; + }; + }; + }; + 'guest-session-rated-tv-episodes': { + parameters: { + query?: { + language?: string; + page?: number; + sort_by?: 'created_at.asc' | 'created_at.desc'; + }; + header?: never; + path: { + guest_session_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** @example 2011-04-17 */ + air_date?: string; + /** + * @default 0 + * @example 1 + */ + episode_number: number; + /** + * @default 0 + * @example 63056 + */ + id: number; + /** @example Winter Is Coming */ + name?: string; + /** @example Jon Arryn, the Hand of the King, is dead. King Robert Baratheon plans to ask his oldest friend, Eddard Stark, to take Jon's place. Across the sea, Viserys Targaryen plans to wed his sister to a nomadic warlord in exchange for an army. */ + overview?: string; + /** @example 101 */ + production_code?: string; + /** + * @default 0 + * @example 62 + */ + runtime: number; + /** + * @default 0 + * @example 1 + */ + season_number: number; + /** + * @default 0 + * @example 1399 + */ + show_id: number; + /** @example /9hGF3WUkBf7cSjMg0cdMDHJkByd.jpg */ + still_path?: string; + /** + * @default 0 + * @example 7.843 + */ + vote_average: number; + /** + * @default 0 + * @example 286 + */ + vote_count: number; + /** + * @default 0 + * @example 8.5 + */ + rating: number; + }[]; + /** + * @default 0 + * @example 1 + */ + total_pages: number; + /** + * @default 0 + * @example 1 + */ + total_results: number; + }; + }; + }; + }; + }; + 'keyword-details': { + parameters: { + query?: never; + header?: never; + path: { + keyword_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1701 + */ + id: number; + /** @example hero */ + name?: string; + }; + }; + }; + }; + }; + 'keyword-movies': { + parameters: { + query?: { + include_adult?: boolean; + language?: string; + page?: number; + }; + header?: never; + path: { + keyword_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1701 + */ + id: number; + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /3CxUndGhUcZdt1Zggjdb2HkLLQX.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 640146 + */ + id: number; + /** @example en */ + original_language?: string; + /** @example Ant-Man and the Wasp: Quantumania */ + original_title?: string; + /** @example Das Superhelden-Duo Scott Lang und Hope Van Dyne erkundet zusammen mit Hopes Eltern Hank Pym und Janet Van Dyne das Quantenreich, interagiert mit seltsamen neuen Kreaturen und begibt sich auf ein Abenteuer, das sie über die Grenzen dessen hinaustreiben wird, was sie für möglich gehalten haben. */ + overview?: string; + /** + * @default 0 + * @example 9200.005 + */ + popularity: number; + /** @example /nA5otwVxAfpBP4PVgeuBk3qHcLY.jpg */ + poster_path?: string; + /** @example 2023-02-15 */ + release_date?: string; + /** @example Ant-Man and the Wasp: Quantumania */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 6.5 + */ + vote_average: number; + /** + * @default 0 + * @example 2079 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 11 + */ + total_pages: number; + /** + * @default 0 + * @example 211 + */ + total_results: number; + }; + }; + }; + }; + }; + 'list-add-movie': { + parameters: { + query: { + session_id: string; + }; + header?: never; + path: { + list_id: number; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/json': { + /** Format: json */ + RAW_BODY?: string; + }; + }; + }; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 12 + */ + status_code: number; + /** @example The item/record was updated successfully. */ + status_message?: string; + }; + }; + }; + }; + }; + 'list-check-item-status': { + parameters: { + query?: { + language?: string; + movie_id?: number; + }; + header?: never; + path: { + list_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + id: number; + /** + * @default true + * @example true + */ + item_present: boolean; + }; + }; + }; + }; + }; + 'list-clear': { + parameters: { + query: { + session_id: string; + confirm: boolean; + }; + header?: never; + path: { + list_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 12 + */ + status_code: number; + /** @example The item/record was updated successfully. */ + status_message?: string; + }; + }; + }; + }; + }; + 'list-create': { + parameters: { + query: { + session_id: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + 'application/json': { + /** Format: json */ + RAW_BODY: string; + }; + }; + }; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** @example The item/record was created successfully. */ + status_message?: string; + /** + * @default true + * @example true + */ + success: boolean; + /** + * @default 0 + * @example 1 + */ + status_code: number; + /** + * @default 0 + * @example 5861 + */ + list_id: number; + }; + }; + }; + }; + }; + 'list-details': { + parameters: { + query?: { + language?: string; + page?: number; + }; + header?: never; + path: { + list_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** @example travisbell */ + created_by?: string; + /** @example The idea behind this list is to collect the live action comic book movies from within the Marvel franchise. */ + description?: string; + /** + * @default 0 + * @example 0 + */ + favorite_count: number; + /** @example 1 */ + id?: string; + items?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /14QbnygCuTO0vl7CAFmPf1fgZfV.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 634649 + */ + id: number; + /** @example movie */ + media_type?: string; + /** @example en */ + original_language?: string; + /** @example Spider-Man: No Way Home */ + original_title?: string; + /** @example Peter Parker ist demaskiert und kann sein normales Leben nicht mehr von den hohen Einsätzen als Superheld trennen. Als er Doctor Strange um Hilfe bittet, wird die Lage noch gefährlicher und er muss entdecken, was es wirklich bedeutet, Spider-Man zu sein. */ + overview?: string; + /** + * @default 0 + * @example 398.217 + */ + popularity: number; + /** @example /iNKf4D0AzOj9GLq8ZyG3WZaqibL.jpg */ + poster_path?: string; + /** @example 2021-12-15 */ + release_date?: string; + /** @example Spider-Man: No Way Home */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 8 + */ + vote_average: number; + /** + * @default 0 + * @example 17267 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 59 + */ + item_count: number; + /** @example en */ + iso_639_1?: string; + /** @example The Marvel Universe */ + name?: string; + /** @example /coJVIUEOToAEGViuhclM7pXC75R.jpg */ + poster_path?: string; + }; + }; + }; + }; + }; + 'list-delete': { + parameters: { + query: { + session_id: string; + }; + header?: never; + path: { + list_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 12 + */ + status_code: number; + /** @example The item/record was updated successfully. */ + status_message?: string; + }; + }; + }; + }; + }; + 'list-remove-movie': { + parameters: { + query: { + session_id: string; + }; + header?: never; + path: { + list_id: number; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/json': { + /** Format: json */ + RAW_BODY: string; + }; + }; + }; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 13 + */ + status_code: number; + /** @example The item/record was deleted successfully. */ + status_message?: string; + }; + }; + }; + }; + }; + 'movie-now-playing-list': { + parameters: { + query?: { + language?: string; + page?: number; + /** @description ISO-3166-1 code */ + region?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + dates?: { + /** @example 2023-05-03 */ + maximum?: string; + /** @example 2023-03-16 */ + minimum?: string; + }; + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /iJQIbOPm81fPEGKt5BPuZmfnA54.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 502356 + */ + id: number; + /** @example en */ + original_language?: string; + /** @example The Super Mario Bros. Movie */ + original_title?: string; + /** @example While working underground to fix a water main, Brooklyn plumbers—and brothers—Mario and Luigi are transported down a mysterious pipe and wander into a magical new world. But when the brothers are separated, Mario embarks on an epic quest to find Luigi. */ + overview?: string; + /** + * @default 0 + * @example 6572.614 + */ + popularity: number; + /** @example /qNBAXBIQlnOThrVvA6mA2B5ggV6.jpg */ + poster_path?: string; + /** @example 2023-04-05 */ + release_date?: string; + /** @example The Super Mario Bros. Movie */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 7.5 + */ + vote_average: number; + /** + * @default 0 + * @example 1456 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 87 + */ + total_pages: number; + /** + * @default 0 + * @example 1734 + */ + total_results: number; + }; + }; + }; + }; + }; + 'movie-popular-list': { + parameters: { + query?: { + language?: string; + page?: number; + /** @description ISO-3166-1 code */ + region?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /gMJngTNfaqCSCqGD4y8lVMZXKDn.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 640146 + */ + id: number; + /** @example en */ + original_language?: string; + /** @example Ant-Man and the Wasp: Quantumania */ + original_title?: string; + /** @example Super-Hero partners Scott Lang and Hope van Dyne, along with with Hope's parents Janet van Dyne and Hank Pym, and Scott's daughter Cassie Lang, find themselves exploring the Quantum Realm, interacting with strange new creatures and embarking on an adventure that will push them beyond the limits of what they thought possible. */ + overview?: string; + /** + * @default 0 + * @example 8567.865 + */ + popularity: number; + /** @example /ngl2FKBlU4fhbdsrtdom9LVLBXw.jpg */ + poster_path?: string; + /** @example 2023-02-15 */ + release_date?: string; + /** @example Ant-Man and the Wasp: Quantumania */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 6.5 + */ + vote_average: number; + /** + * @default 0 + * @example 1886 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 38029 + */ + total_pages: number; + /** + * @default 0 + * @example 760569 + */ + total_results: number; + }; + }; + }; + }; + }; + 'movie-top-rated-list': { + parameters: { + query?: { + language?: string; + page?: number; + /** @description ISO-3166-1 code */ + region?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /tmU7GeKVybMWFButWEGl2M4GeiP.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 238 + */ + id: number; + /** @example en */ + original_language?: string; + /** @example The Godfather */ + original_title?: string; + /** @example Spanning the years 1945 to 1955, a chronicle of the fictional Italian-American Corleone crime family. When organized crime family patriarch, Vito Corleone barely survives an attempt on his life, his youngest son, Michael steps in to take care of the would-be killers, launching a campaign of bloody revenge. */ + overview?: string; + /** + * @default 0 + * @example 100.932 + */ + popularity: number; + /** @example /3bhkrj58Vtu7enYsRolD1fZdja1.jpg */ + poster_path?: string; + /** @example 1972-03-14 */ + release_date?: string; + /** @example The Godfather */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 8.7 + */ + vote_average: number; + /** + * @default 0 + * @example 17806 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 552 + */ + total_pages: number; + /** + * @default 0 + * @example 11032 + */ + total_results: number; + }; + }; + }; + }; + }; + 'movie-upcoming-list': { + parameters: { + query?: { + language?: string; + page?: number; + /** @description ISO-3166-1 code */ + region?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + dates?: { + /** @example 2023-05-23 */ + maximum?: string; + /** @example 2023-05-04 */ + minimum?: string; + }; + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /7bWxAsNPv9CXHOhZbJVlj2KxgfP.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 713704 + */ + id: number; + /** @example en */ + original_language?: string; + /** @example Evil Dead Rise */ + original_title?: string; + /** @example Two sisters find an ancient vinyl that gives birth to bloodthirsty demons that run amok in a Los Angeles apartment building and thrusts them into a primal battle for survival as they face the most nightmarish version of family imaginable. */ + overview?: string; + /** + * @default 0 + * @example 1696.367 + */ + popularity: number; + /** @example /mIBCtPvKZQlxubxKMeViO2UrP3q.jpg */ + poster_path?: string; + /** @example 2023-04-12 */ + release_date?: string; + /** @example Evil Dead Rise */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 7 + */ + vote_average: number; + /** + * @default 0 + * @example 207 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 19 + */ + total_pages: number; + /** + * @default 0 + * @example 369 + */ + total_results: number; + }; + }; + }; + }; + }; + 'movie-details': { + parameters: { + query?: { + /** @description comma separated list of endpoints within this namespace, 20 items max */ + append_to_response?: string; + language?: string; + }; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /hZkgoQYus5vegHoetLkCJzb17zJ.jpg */ + backdrop_path?: string; + belongs_to_collection?: unknown; + /** + * @default 0 + * @example 63000000 + */ + budget: number; + genres?: { + /** + * @default 0 + * @example 18 + */ + id: number; + /** @example Drama */ + name?: string; + }[]; + /** @example http://www.foxmovies.com/movies/fight-club */ + homepage?: string; + /** + * @default 0 + * @example 550 + */ + id: number; + /** @example tt0137523 */ + imdb_id?: string; + /** @example en */ + original_language?: string; + /** @example Fight Club */ + original_title?: string; + /** @example A ticking-time-bomb insomniac and a slippery soap salesman channel primal male aggression into a shocking new form of therapy. Their concept catches on, with underground "fight clubs" forming in every town, until an eccentric gets in the way and ignites an out-of-control spiral toward oblivion. */ + overview?: string; + /** + * @default 0 + * @example 61.416 + */ + popularity: number; + /** @example /pB8BM7pdSp6B6Ih7QZ4DrQ3PmJK.jpg */ + poster_path?: string; + production_companies?: { + /** + * @default 0 + * @example 508 + */ + id: number; + /** @example /7cxRWzi4LsVm4Utfpr1hfARNurT.png */ + logo_path?: string; + /** @example Regency Enterprises */ + name?: string; + /** @example US */ + origin_country?: string; + }[]; + production_countries?: { + /** @example US */ + iso_3166_1?: string; + /** @example United States of America */ + name?: string; + }[]; + /** @example 1999-10-15 */ + release_date?: string; + /** + * @default 0 + * @example 100853753 + */ + revenue: number; + /** + * @default 0 + * @example 139 + */ + runtime: number; + spoken_languages?: { + /** @example English */ + english_name?: string; + /** @example en */ + iso_639_1?: string; + /** @example English */ + name?: string; + }[]; + /** @example Released */ + status?: string; + /** @example Mischief. Mayhem. Soap. */ + tagline?: string; + /** @example Fight Club */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 8.433 + */ + vote_average: number; + /** + * @default 0 + * @example 26280 + */ + vote_count: number; + }; + }; + }; + }; + }; + 'movie-account-states': { + parameters: { + query?: { + session_id?: string; + guest_session_id?: string; + }; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 550 + */ + id: number; + /** + * @default true + * @example true + */ + favorite: boolean; + rated?: { + /** + * @default 0 + * @example 9 + */ + value: number; + }; + /** + * @default true + * @example false + */ + watchlist: boolean; + }; + }; + }; + }; + }; + 'movie-alternative-titles': { + parameters: { + query?: { + /** @description specify a ISO-3166-1 value to filter the results */ + country?: string; + }; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 550 + */ + id: number; + titles?: { + /** @example RS */ + iso_3166_1?: string; + /** @example Borilački klub */ + title?: string; + /** @example */ + type?: string; + }[]; + }; + }; + }; + }; + }; + 'movie-changes': { + parameters: { + query?: { + end_date?: string; + page?: number; + start_date?: string; + }; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + changes?: { + /** @example images */ + key?: string; + items?: { + /** @example 643197b96dea3a00d4377270 */ + id?: string; + /** @example added */ + action?: string; + /** @example 2023-04-08 16:35:05 UTC */ + time?: string; + /** @example */ + iso_639_1?: string; + /** @example */ + iso_3166_1?: string; + value?: { + poster?: { + /** @example /s9ZrHprviFCx3azfWNBtt1LPSnL.jpg */ + file_path?: string; + }; + }; + }[]; + }[]; + }; + }; + }; + }; + }; + 'movie-credits': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 550 + */ + id: number; + cast?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** + * @default 0 + * @example 819 + */ + id: number; + /** @example Acting */ + known_for_department?: string; + /** @example Edward Norton */ + name?: string; + /** @example Edward Norton */ + original_name?: string; + /** + * @default 0 + * @example 26.99 + */ + popularity: number; + /** @example /8nytsqL59SFJTVYVrN72k6qkGgJ.jpg */ + profile_path?: string; + /** + * @default 0 + * @example 4 + */ + cast_id: number; + /** @example The Narrator */ + character?: string; + /** @example 52fe4250c3a36847f80149f3 */ + credit_id?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + crew?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** + * @default 0 + * @example 376 + */ + id: number; + /** @example Production */ + known_for_department?: string; + /** @example Arnon Milchan */ + name?: string; + /** @example Arnon Milchan */ + original_name?: string; + /** + * @default 0 + * @example 2.931 + */ + popularity: number; + /** @example /b2hBExX4NnczNAnLuTBF4kmNhZm.jpg */ + profile_path?: string; + /** @example 55731b8192514111610027d7 */ + credit_id?: string; + /** @example Production */ + department?: string; + /** @example Executive Producer */ + job?: string; + }[]; + }; + }; + }; + }; + }; + 'movie-external-ids': { + parameters: { + query?: never; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 550 + */ + id: number; + /** @example tt0137523 */ + imdb_id?: string; + wikidata_id?: unknown; + /** @example FightClub */ + facebook_id?: string; + instagram_id?: unknown; + twitter_id?: unknown; + }; + }; + }; + }; + }; + 'movie-images': { + parameters: { + query?: { + /** @description specify a comma separated list of ISO-639-1 values to query, for example: `en-US,null` */ + include_image_language?: string; + language?: string; + }; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + backdrops?: { + /** + * @default 0 + * @example 1.778 + */ + aspect_ratio: number; + /** + * @default 0 + * @example 800 + */ + height: number; + iso_639_1?: unknown; + /** @example /hZkgoQYus5vegHoetLkCJzb17zJ.jpg */ + file_path?: string; + /** + * @default 0 + * @example 5.622 + */ + vote_average: number; + /** + * @default 0 + * @example 20 + */ + vote_count: number; + /** + * @default 0 + * @example 1422 + */ + width: number; + }[]; + /** + * @default 0 + * @example 550 + */ + id: number; + logos?: { + /** + * @default 0 + * @example 5.203 + */ + aspect_ratio: number; + /** + * @default 0 + * @example 79 + */ + height: number; + /** @example he */ + iso_639_1?: string; + /** @example /c1KLulrIhUqY5fT42nmC5aERGCp.png */ + file_path?: string; + /** + * @default 0 + * @example 5.312 + */ + vote_average: number; + /** + * @default 0 + * @example 1 + */ + vote_count: number; + /** + * @default 0 + * @example 411 + */ + width: number; + }[]; + posters?: { + /** + * @default 0 + * @example 0.667 + */ + aspect_ratio: number; + /** + * @default 0 + * @example 900 + */ + height: number; + /** @example pt */ + iso_639_1?: string; + /** @example /r3pPehX4ik8NLYPpbDRAh0YRtMb.jpg */ + file_path?: string; + /** + * @default 0 + * @example 5.258 + */ + vote_average: number; + /** + * @default 0 + * @example 6 + */ + vote_count: number; + /** + * @default 0 + * @example 600 + */ + width: number; + }[]; + }; + }; + }; + }; + }; + 'movie-keywords': { + parameters: { + query?: never; + header?: never; + path: { + movie_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 550 + */ + id: number; + keywords?: { + /** + * @default 0 + * @example 818 + */ + id: number; + /** @example based on novel or book */ + name?: string; + }[]; + }; + }; + }; + }; + }; + 'movie-latest-id': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default true + * @example false + */ + adult: boolean; + backdrop_path?: unknown; + belongs_to_collection?: unknown; + /** + * @default 0 + * @example 0 + */ + budget: number; + genres?: unknown[]; + /** @example */ + homepage?: string; + /** + * @default 0 + * @example 1119232 + */ + id: number; + imdb_id?: unknown; + /** @example fr */ + original_language?: string; + /** @example König Charles III */ + original_title?: string; + /** @example */ + overview?: string; + /** + * @default 0 + * @example 0 + */ + popularity: number; + poster_path?: unknown; + production_companies?: unknown[]; + production_countries?: unknown[]; + /** @example */ + release_date?: string; + /** + * @default 0 + * @example 0 + */ + revenue: number; + /** + * @default 0 + * @example 0 + */ + runtime: number; + spoken_languages?: unknown[]; + /** @example Released */ + status?: string; + /** @example */ + tagline?: string; + /** @example König Charles III */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 0 + */ + vote_average: number; + /** + * @default 0 + * @example 0 + */ + vote_count: number; + }; + }; + }; + }; + }; + 'movie-lists': { + parameters: { + query?: { + language?: string; + page?: number; + }; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 550 + */ + id: number; + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** @example Movies I own */ + description?: string; + /** + * @default 0 + * @example 0 + */ + favorite_count: number; + /** + * @default 0 + * @example 8248696 + */ + id: number; + /** + * @default 0 + * @example 409 + */ + item_count: number; + /** @example en */ + iso_639_1?: string; + /** @example movie */ + list_type?: string; + /** @example My Movies */ + name?: string; + poster_path?: unknown; + }[]; + /** + * @default 0 + * @example 122 + */ + total_pages: number; + /** + * @default 0 + * @example 2422 + */ + total_results: number; + }; + }; + }; + }; + }; + 'movie-recommendations': { + parameters: { + query?: { + language?: string; + page?: number; + }; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': Record; + }; + }; + }; + }; + 'movie-release-dates': { + parameters: { + query?: never; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 550 + */ + id: number; + results?: { + /** @example BG */ + iso_3166_1?: string; + release_dates?: { + /** @example c */ + certification?: string; + descriptors?: unknown[]; + /** @example */ + iso_639_1?: string; + /** @example */ + note?: string; + /** @example 2012-08-28T00:00:00.000Z */ + release_date?: string; + /** + * @default 0 + * @example 3 + */ + type: number; + }[]; + }[]; + }; + }; + }; + }; + }; + 'movie-reviews': { + parameters: { + query?: { + language?: string; + page?: number; + }; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 550 + */ + id: number; + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** @example Goddard */ + author?: string; + author_details?: { + /** @example */ + name?: string; + /** @example Goddard */ + username?: string; + /** @example /https://secure.gravatar.com/avatar/f248ec34f953bc62cafcbdd81fddd6b6.jpg */ + avatar_path?: string; + rating?: unknown; + }; + /** @example Pretty awesome movie. It shows what one crazy person can convince other crazy people to do. Everyone needs something to believe in. I recommend Jesus Christ, but they want Tyler Durden. */ + content?: string; + /** @example 2018-06-09T17:51:53.359Z */ + created_at?: string; + /** @example 5b1c13b9c3a36848f2026384 */ + id?: string; + /** @example 2021-06-23T15:58:09.421Z */ + updated_at?: string; + /** @example https://www.themoviedb.org/review/5b1c13b9c3a36848f2026384 */ + url?: string; + }[]; + /** + * @default 0 + * @example 1 + */ + total_pages: number; + /** + * @default 0 + * @example 8 + */ + total_results: number; + }; + }; + }; + }; + }; + 'movie-similar': { + parameters: { + query?: { + language?: string; + page?: number; + }; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /3YAldML4EDyoC6RBpzceALigrAZ.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 9300 + */ + id: number; + /** @example en */ + original_language?: string; + /** @example Orlando */ + original_title?: string; + /** @example England, 1600. Queen Elizabeth I promises Orlando, a young nobleman obsessed with poetry, that she will grant him land and fortune if he agrees to satisfy a very particular request. */ + overview?: string; + /** + * @default 0 + * @example 7.768 + */ + popularity: number; + /** @example /xvz0qZkXXMq3dH2Revxii8drxWc.jpg */ + poster_path?: string; + /** @example 1992-12-11 */ + release_date?: string; + /** @example Orlando */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 6.966 + */ + vote_average: number; + /** + * @default 0 + * @example 262 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 364 + */ + total_pages: number; + /** + * @default 0 + * @example 7269 + */ + total_results: number; + }; + }; + }; + }; + }; + 'movie-translations': { + parameters: { + query?: never; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 550 + */ + id: number; + translations?: { + /** @example SA */ + iso_3166_1?: string; + /** @example ar */ + iso_639_1?: string; + /** @example العربية */ + name?: string; + /** @example Arabic */ + english_name?: string; + data?: { + /** @example */ + homepage?: string; + /** @example إدوارد يتعرض لضغوط حتى يصل به الحال إلى أنه لا يستطيع النوم لفتراتٍ طويلة، لكنه يجد بعض السلام في جلسات العلاج النفسي الجماعي، يتعرف إدوارد على أحد الأشخاص وهو (تايلر ديردن) الذي يحرره من تعلقه بالأشياء الذي تستعبده ،ثم يحرره من خوفه من الناس. يقومان معًا بإنشاء نادي القتال الذي يجذب الكثير من الأفراد المحبطين ،الذين يقومون بإخراج طاقة غضبهم وكرههم للعالم في القتال. */ + overview?: string; + /** + * @default 0 + * @example 0 + */ + runtime: number; + /** @example */ + tagline?: string; + /** @example */ + title?: string; + }; + }[]; + }; + }; + }; + }; + }; + 'movie-videos': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 550 + */ + id: number; + results?: { + /** @example en */ + iso_639_1?: string; + /** @example US */ + iso_3166_1?: string; + /** @example Fight Club (1999) Trailer - Starring Brad Pitt, Edward Norton, Helena Bonham Carter */ + name?: string; + /** @example O-b2VfmmbyA */ + key?: string; + /** @example YouTube */ + site?: string; + /** + * @default 0 + * @example 720 + */ + size: number; + /** @example Trailer */ + type?: string; + /** + * @default true + * @example false + */ + official: boolean; + /** @example 2016-03-05T02:03:14.000Z */ + published_at?: string; + /** @example 639d5326be6d88007f170f44 */ + id?: string; + }[]; + }; + }; + }; + }; + }; + 'movie-watch-providers': { + parameters: { + query?: never; + header?: never; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 550 + */ + id: number; + results?: { + AE?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=AE */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 12 + */ + display_priority: number; + }[]; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + AL?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=AL */ + link?: string; + buy?: { + /** @example /5GEbAhFW2S5T8zVc1MNvz00pIzM.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 35 + */ + provider_id: number; + /** @example Rakuten TV */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + }; + AR?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=AR */ + link?: string; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + rent?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + }; + AT?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=AT */ + link?: string; + flatrate?: { + /** @example /7rwgEs15tFwyR9NPQ5vpzxTj19Q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 337 + */ + provider_id: number; + /** @example Disney Plus */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + buy?: { + /** @example /5NyLm42TmCqCMOZFvH4fcoSNKEW.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + rent?: { + /** @example /5NyLm42TmCqCMOZFvH4fcoSNKEW.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + AU?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=AU */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 10 + */ + display_priority: number; + }[]; + }; + BA?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=BA */ + link?: string; + buy?: { + /** @example /5GEbAhFW2S5T8zVc1MNvz00pIzM.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 35 + */ + provider_id: number; + /** @example Rakuten TV */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + BB?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=BB */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 28 + */ + display_priority: number; + }[]; + }; + BE?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=BE */ + link?: string; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /7rwgEs15tFwyR9NPQ5vpzxTj19Q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 337 + */ + provider_id: number; + /** @example Disney Plus */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + }; + BG?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=BG */ + link?: string; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + BH?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=BH */ + link?: string; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 1000 + */ + display_priority: number; + }[]; + }; + BO?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=BO */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + BR?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=BR */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + }; + BS?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=BS */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 28 + */ + display_priority: number; + }[]; + }; + CA?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=CA */ + link?: string; + rent?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 8 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /sB5vHrmYmliwUvBwZe8HpXo9r8m.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 305 + */ + provider_id: number; + /** @example Crave Starz */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + }; + CH?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=CH */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /rVOOhp6V8FheEAKtFAJMLMbnaMZ.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 150 + */ + provider_id: number; + /** @example blue TV */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + rent?: { + /** @example /rVOOhp6V8FheEAKtFAJMLMbnaMZ.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 150 + */ + provider_id: number; + /** @example blue TV */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + CL?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=CL */ + link?: string; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + rent?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + CO?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=CO */ + link?: string; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + rent?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + CR?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=CR */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + CV?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=CV */ + link?: string; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 13 + */ + display_priority: number; + }[]; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 13 + */ + display_priority: number; + }[]; + }; + CZ?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=CZ */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + rent?: { + /** @example /wTF37o4jOkQfjnWe41gmeuASYZA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 308 + */ + provider_id: number; + /** @example O2 TV */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + DE?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=DE */ + link?: string; + flatrate?: { + /** @example /7rwgEs15tFwyR9NPQ5vpzxTj19Q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 337 + */ + provider_id: number; + /** @example Disney Plus */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + DK?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=DK */ + link?: string; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /7rwgEs15tFwyR9NPQ5vpzxTj19Q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 337 + */ + provider_id: number; + /** @example Disney Plus */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + DO?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=DO */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + EC?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=EC */ + link?: string; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + rent?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + }; + EE?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=EE */ + link?: string; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + rent?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + EG?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=EG */ + link?: string; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + }; + ES?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=ES */ + link?: string; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + ads?: { + /** @example /5GEbAhFW2S5T8zVc1MNvz00pIzM.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 35 + */ + provider_id: number; + /** @example Rakuten TV */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + FI?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=FI */ + link?: string; + flatrate?: { + /** @example /7rwgEs15tFwyR9NPQ5vpzxTj19Q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 337 + */ + provider_id: number; + /** @example Disney Plus */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 10 + */ + display_priority: number; + }[]; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 10 + */ + display_priority: number; + }[]; + }; + FJ?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=FJ */ + link?: string; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 1000 + */ + display_priority: number; + }[]; + }; + FR?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=FR */ + link?: string; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + GB?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=GB */ + link?: string; + flatrate?: { + /** @example /7rwgEs15tFwyR9NPQ5vpzxTj19Q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 337 + */ + provider_id: number; + /** @example Disney Plus */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /5NyLm42TmCqCMOZFvH4fcoSNKEW.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + rent?: { + /** @example /5NyLm42TmCqCMOZFvH4fcoSNKEW.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + GF?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=GF */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 30 + */ + display_priority: number; + }[]; + }; + GI?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=GI */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + GR?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=GR */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + }; + GT?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=GT */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + HK?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=HK */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + HN?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=HN */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + HR?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=HR */ + link?: string; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + ads?: { + /** @example /xrHrIraInfRXnrz1zHhY1tXJowg.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 572 + */ + provider_id: number; + /** @example RTL Play */ + provider_name?: string; + /** + * @default 0 + * @example 30 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + HU?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=HU */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + ID?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=ID */ + link?: string; + flatrate?: { + /** @example /7Fl8ylPDclt3ZYgNbW2t7rbZE9I.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 122 + */ + provider_id: number; + /** @example Hotstar */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + IE?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=IE */ + link?: string; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + IL?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=IL */ + link?: string; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 28 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + IN?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=IN */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 8 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 8 + */ + display_priority: number; + }[]; + }; + IQ?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=IQ */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + IS?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=IS */ + link?: string; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /7rwgEs15tFwyR9NPQ5vpzxTj19Q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 337 + */ + provider_id: number; + /** @example Disney Plus */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + IT?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=IT */ + link?: string; + buy?: { + /** @example /5GEbAhFW2S5T8zVc1MNvz00pIzM.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 35 + */ + provider_id: number; + /** @example Rakuten TV */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + rent?: { + /** @example /5GEbAhFW2S5T8zVc1MNvz00pIzM.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 35 + */ + provider_id: number; + /** @example Rakuten TV */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + JM?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=JM */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 27 + */ + display_priority: number; + }[]; + }; + JO?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=JO */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 1000 + */ + display_priority: number; + }[]; + }; + JP?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=JP */ + link?: string; + flatrate?: { + /** @example /7rwgEs15tFwyR9NPQ5vpzxTj19Q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 337 + */ + provider_id: number; + /** @example Disney Plus */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + rent?: { + /** @example /g8jqHtXJsMlc8B1Gb0Rt8AvUJMn.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 85 + */ + provider_id: number; + /** @example dTV */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + KR?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=KR */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /2ioan5BX5L9tz4fIGU93blTeFhv.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 356 + */ + provider_id: number; + /** @example wavve */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + KW?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=KW */ + link?: string; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 1000 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + LB?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=LB */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 1000 + */ + display_priority: number; + }[]; + }; + LI?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=LI */ + link?: string; + flatrate?: { + /** @example /7rwgEs15tFwyR9NPQ5vpzxTj19Q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 337 + */ + provider_id: number; + /** @example Disney Plus */ + provider_name?: string; + /** + * @default 0 + * @example 30 + */ + display_priority: number; + }[]; + }; + LT?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=LT */ + link?: string; + rent?: { + /** @example /xTVM8uXT9QocigQ07LE7Irc65W2.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 553 + */ + provider_id: number; + /** @example Telia Play */ + provider_name?: string; + /** + * @default 0 + * @example 15 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + LV?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=LV */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + MD?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=MD */ + link?: string; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 1000 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 26 + */ + display_priority: number; + }[]; + }; + MK?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=MK */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 29 + */ + display_priority: number; + }[]; + buy?: { + /** @example /5GEbAhFW2S5T8zVc1MNvz00pIzM.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 35 + */ + provider_id: number; + /** @example Rakuten TV */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + }; + MT?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=MT */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /5GEbAhFW2S5T8zVc1MNvz00pIzM.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 35 + */ + provider_id: number; + /** @example Rakuten TV */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + rent?: { + /** @example /5GEbAhFW2S5T8zVc1MNvz00pIzM.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 35 + */ + provider_id: number; + /** @example Rakuten TV */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + }; + MU?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=MU */ + link?: string; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 15 + */ + display_priority: number; + }[]; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 15 + */ + display_priority: number; + }[]; + }; + MX?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=MX */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + MY?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=MY */ + link?: string; + flatrate?: { + /** @example /7Fl8ylPDclt3ZYgNbW2t7rbZE9I.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 122 + */ + provider_id: number; + /** @example Hotstar */ + provider_name?: string; + /** + * @default 0 + * @example 0 + */ + display_priority: number; + }[]; + }; + MZ?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=MZ */ + link?: string; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 16 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 16 + */ + display_priority: number; + }[]; + }; + NL?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=NL */ + link?: string; + buy?: { + /** @example /llmnYOyknekZsXtkCaazKjhTLvG.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 71 + */ + provider_id: number; + /** @example Pathé Thuis */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + rent?: { + /** @example /llmnYOyknekZsXtkCaazKjhTLvG.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 71 + */ + provider_id: number; + /** @example Pathé Thuis */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /7rwgEs15tFwyR9NPQ5vpzxTj19Q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 337 + */ + provider_id: number; + /** @example Disney Plus */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + NO?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=NO */ + link?: string; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /7rwgEs15tFwyR9NPQ5vpzxTj19Q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 337 + */ + provider_id: number; + /** @example Disney Plus */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + NZ?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=NZ */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + OM?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=OM */ + link?: string; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 1000 + */ + display_priority: number; + }[]; + rent?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 1000 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + PA?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=PA */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + PE?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=PE */ + link?: string; + rent?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + }; + PH?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=PH */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + PK?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=PK */ + link?: string; + flatrate?: { + /** @example /t2yyOv40HZeVlLjYsCsPHnWLk4W.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 8 + */ + provider_id: number; + /** @example Netflix */ + provider_name?: string; + /** + * @default 0 + * @example 0 + */ + display_priority: number; + }[]; + }; + PL?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=PL */ + link?: string; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + PS?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=PS */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + PT?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=PT */ + link?: string; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + rent?: { + /** @example /dUeHhim2WUZz8S7EWjv0Ws6anRP.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 242 + */ + provider_id: number; + /** @example Meo */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /7rwgEs15tFwyR9NPQ5vpzxTj19Q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 337 + */ + provider_id: number; + /** @example Disney Plus */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + PY?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=PY */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + QA?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=QA */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 1000 + */ + display_priority: number; + }[]; + }; + RO?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=RO */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + RS?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=RS */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /5GEbAhFW2S5T8zVc1MNvz00pIzM.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 35 + */ + provider_id: number; + /** @example Rakuten TV */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + }; + RU?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=RU */ + link?: string; + rent?: { + /** @example /o9ExgOSLF3OTwR6T3DJOuwOKJgq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 113 + */ + provider_id: number; + /** @example Ivi */ + provider_name?: string; + /** + * @default 0 + * @example 1000 + */ + display_priority: number; + }[]; + buy?: { + /** @example /o9ExgOSLF3OTwR6T3DJOuwOKJgq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 113 + */ + provider_id: number; + /** @example Ivi */ + provider_name?: string; + /** + * @default 0 + * @example 1000 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /zLM7f1w2L8TU2Fspzns72m6h3yY.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 501 + */ + provider_id: number; + /** @example Wink */ + provider_name?: string; + /** + * @default 0 + * @example 1000 + */ + display_priority: number; + }[]; + }; + SA?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=SA */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 28 + */ + display_priority: number; + }[]; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + SE?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=SE */ + link?: string; + buy?: { + /** @example /shq88b09gTBYC4hA7K7MUL8Q4zP.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 68 + */ + provider_id: number; + /** @example Microsoft Store */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + rent?: { + /** @example /shq88b09gTBYC4hA7K7MUL8Q4zP.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 68 + */ + provider_id: number; + /** @example Microsoft Store */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /7rwgEs15tFwyR9NPQ5vpzxTj19Q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 337 + */ + provider_id: number; + /** @example Disney Plus */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + SG?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=SG */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + SI?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=SI */ + link?: string; + buy?: { + /** @example /5GEbAhFW2S5T8zVc1MNvz00pIzM.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 35 + */ + provider_id: number; + /** @example Rakuten TV */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + SK?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=SK */ + link?: string; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + SM?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=SM */ + link?: string; + flatrate?: { + /** @example /7rwgEs15tFwyR9NPQ5vpzxTj19Q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 337 + */ + provider_id: number; + /** @example Disney Plus */ + provider_name?: string; + /** + * @default 0 + * @example 30 + */ + display_priority: number; + }[]; + }; + SV?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=SV */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + TH?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=TH */ + link?: string; + flatrate?: { + /** @example /7Fl8ylPDclt3ZYgNbW2t7rbZE9I.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 122 + */ + provider_id: number; + /** @example Hotstar */ + provider_name?: string; + /** + * @default 0 + * @example 0 + */ + display_priority: number; + }[]; + }; + TR?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=TR */ + link?: string; + rent?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + }; + TT?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=TT */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + }; + TW?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=TW */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + UG?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=UG */ + link?: string; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 16 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 16 + */ + display_priority: number; + }[]; + }; + US?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=US */ + link?: string; + rent?: { + /** @example /5NyLm42TmCqCMOZFvH4fcoSNKEW.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 13 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /jPXksae158ukMLFhhlNvzsvaEyt.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 257 + */ + provider_id: number; + /** @example fuboTV */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + UY?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=UY */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + VE?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=VE */ + link?: string; + rent?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + YE?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=YE */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + }; + ZA?: { + /** @example https://www.themoviedb.org/movie/550-fight-club/watch?locale=ZA */ + link?: string; + flatrate?: { + /** @example /emthp39XA2YScoYL1p0sdbAH2WA.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 119 + */ + provider_id: number; + /** @example Amazon Prime Video */ + provider_name?: string; + /** + * @default 0 + * @example 1 + */ + display_priority: number; + }[]; + rent?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + }; + }; + }; + }; + }; + }; + }; + 'movie-add-rating': { + parameters: { + query?: { + guest_session_id?: string; + session_id?: string; + }; + header: { + 'Content-Type': string; + }; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/json': { + /** Format: json */ + RAW_BODY: string; + }; + }; + }; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + status_code: number; + /** @example Success. */ + status_message?: string; + }; + }; + }; + }; + }; + 'movie-delete-rating': { + parameters: { + query?: { + guest_session_id?: string; + session_id?: string; + }; + header?: { + 'Content-Type'?: string; + }; + path: { + movie_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 13 + */ + status_code: number; + /** @example The item/record was deleted successfully. */ + status_message?: string; + }; + }; + }; + }; + }; + 'network-details': { + parameters: { + query?: never; + header?: never; + path: { + network_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** @example New York City, New York */ + headquarters?: string; + /** @example https://www.hbo.com */ + homepage?: string; + /** + * @default 0 + * @example 49 + */ + id: number; + /** @example /tuomPhY2UtuPTqqFnKMVHvSb724.png */ + logo_path?: string; + /** @example HBO */ + name?: string; + /** @example US */ + origin_country?: string; + }; + }; + }; + }; + }; + 'details-copy': { + parameters: { + query?: never; + header?: never; + path: { + network_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 49 + */ + id: number; + results?: { + /** @example Home Box Office */ + name?: string; + /** @example */ + type?: string; + }[]; + }; + }; + }; + }; + }; + 'alternative-names-copy': { + parameters: { + query?: never; + header?: never; + path: { + network_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 49 + */ + id: number; + logos?: { + /** + * @default 0 + * @example 2.425287356321839 + */ + aspect_ratio: number; + /** @example /tuomPhY2UtuPTqqFnKMVHvSb724.png */ + file_path?: string; + /** + * @default 0 + * @example 174 + */ + height: number; + /** @example 5a7a67a40e0a26020a000091 */ + id?: string; + /** @example .svg */ + file_type?: string; + /** + * @default 0 + * @example 5.318 + */ + vote_average: number; + /** + * @default 0 + * @example 3 + */ + vote_count: number; + /** + * @default 0 + * @example 422 + */ + width: number; + }[]; + }; + }; + }; + }; + }; + 'person-popular-list': { + parameters: { + query?: { + language?: string; + page?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 1 + */ + gender: number; + /** + * @default 0 + * @example 224513 + */ + id: number; + known_for?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /ilRyazdMJwN05exqhwK4tMKBYZs.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 335984 + */ + id: number; + /** @example movie */ + media_type?: string; + /** @example en */ + original_language?: string; + /** @example Blade Runner 2049 */ + original_title?: string; + /** @example Thirty years after the events of the first film, a new blade runner, LAPD Officer K, unearths a long-buried secret that has the potential to plunge what's left of society into chaos. K's discovery leads him on a quest to find Rick Deckard, a former LAPD blade runner who has been missing for 30 years. */ + overview?: string; + /** @example /gajva2L0rPYkEWjzgFlBXCAVBE5.jpg */ + poster_path?: string; + /** @example 2017-10-04 */ + release_date?: string; + /** @example Blade Runner 2049 */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 7.5 + */ + vote_average: number; + /** + * @default 0 + * @example 11771 + */ + vote_count: number; + }[]; + /** @example Acting */ + known_for_department?: string; + /** @example Ana de Armas */ + name?: string; + /** + * @default 0 + * @example 343.33 + */ + popularity: number; + /** @example /3vxvsmYLTf4jnr163SUlBIw51ee.jpg */ + profile_path?: string; + }[]; + /** + * @default 0 + * @example 500 + */ + total_pages: number; + /** + * @default 0 + * @example 10000 + */ + total_results: number; + }; + }; + }; + }; + }; + 'person-details': { + parameters: { + query?: { + /** @description comma separated list of endpoints within this namespace, 20 items max */ + append_to_response?: string; + language?: string; + }; + header?: never; + path: { + person_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default true + * @example false + */ + adult: boolean; + also_known_as?: string[]; + /** + * @example Thomas Jeffrey Hanks (born July 9, 1956) is an American actor and filmmaker. Known for both his comedic and dramatic roles, Hanks is one of the most popular and recognizable film stars worldwide, and is widely regarded as an American cultural icon. + * + * Hanks made his breakthrough with leading roles in the comedies Splash (1984) and Big (1988). He won two consecutive Academy Awards for Best Actor for starring as a gay lawyer suffering from AIDS in Philadelphia (1993) and a young man with below-average IQ in Forrest Gump (1994). Hanks collaborated with film director Steven Spielberg on five films: Saving Private Ryan (1998), Catch Me If You Can (2002), The Terminal (2004), Bridge of Spies (2015), and The Post (2017), as well as the 2001 miniseries Band of Brothers, which launched him as a director, producer, and screenwriter. + * + * Hanks' other notable films include the romantic comedies Sleepless in Seattle (1993) and You've Got Mail (1998); the dramas Apollo 13 (1995), The Green Mile (1999), Cast Away (2000), Road to Perdition (2002), and Cloud Atlas (2012); and the biographical dramas Saving Mr. Banks (2013), Captain Phillips (2013), Sully (2016), and A Beautiful Day in the Neighborhood (2019). He has also appeared as the title character in the Robert Langdon film series, and has voiced Sheriff Woody in the Toy Story film series. + * + * Description above from the Wikipedia article Tom Hanks, licensed under CC-BY-SA, full list of contributors on Wikipedia. + */ + biography?: string; + /** @example 1956-07-09 */ + birthday?: string; + deathday?: unknown; + /** + * @default 0 + * @example 2 + */ + gender: number; + homepage?: unknown; + /** + * @default 0 + * @example 31 + */ + id: number; + /** @example nm0000158 */ + imdb_id?: string; + /** @example Acting */ + known_for_department?: string; + /** @example Tom Hanks */ + name?: string; + /** @example Concord, California, USA */ + place_of_birth?: string; + /** + * @default 0 + * @example 82.989 + */ + popularity: number; + /** @example /xndWFsBlClOJFRdhSt4NBwiPq2o.jpg */ + profile_path?: string; + }; + }; + }; + }; + }; + 'person-changes': { + parameters: { + query?: { + end_date?: string; + page?: number; + start_date?: string; + }; + header?: never; + path: { + person_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + changes?: { + /** @example biography */ + key?: string; + items?: { + /** @example 640469b113654500ba4e859a */ + id?: string; + /** @example added */ + action?: string; + /** @example 2023-03-05 10:06:41 UTC */ + time?: string; + /** @example ca */ + iso_639_1?: string; + /** @example ES */ + iso_3166_1?: string; + /** + * @example Thomas "Tom" Jeffrey Hanks (Concord, Califòrnia, 9 de juliol de 1956) és un actor de cinema i productor estatunidenc, guanyador dues vegades de l'Oscar al millor actor i considerat un dels més versàtils i talentosos del cinema actual. + * + * Hanks és l'actor que més diners ha guanyat de tota la història del cinema amb un total de gairebé sis mil milions de dòlars (setembre 2006). És també copropietari de Playtone, una companyia de producció de pel·lícules. + */ + value?: string; + }[]; + }[]; + }; + }; + }; + }; + }; + 'person-combined-credits': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path: { + person_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + cast?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /3h1JZGDhZ8nzxdgvkxha0qBqi05.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 13 + */ + id: number; + /** @example en */ + original_language?: string; + /** @example Forrest Gump */ + original_title?: string; + /** @example A man with a low IQ has accomplished great things in his life and been present during significant historic events—in each case, far exceeding what anyone imagined he could do. But despite all he has achieved, his one true love eludes him. */ + overview?: string; + /** + * @default 0 + * @example 62.225 + */ + popularity: number; + /** @example /arw2vcBveWOVZr6pxd9XTd1TdQa.jpg */ + poster_path?: string; + /** @example 1994-06-23 */ + release_date?: string; + /** @example Forrest Gump */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 8.481 + */ + vote_average: number; + /** + * @default 0 + * @example 24535 + */ + vote_count: number; + /** @example Forrest Gump */ + character?: string; + /** @example 52fe420ec3a36847f800074f */ + credit_id?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + /** @example movie */ + media_type?: string; + }[]; + crew?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /tx3uj8GPWf5pzb0gWATJ4bokNHI.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 87061 + */ + id: number; + /** @example fr */ + original_language?: string; + /** @example Le Voyage extraordinaire */ + original_title?: string; + /** @example An account of the extraordinary life of film pioneer Georges Méliès (1861-1938) and the amazing story of the copy in color of his masterpiece “A Trip to the Moon” (1902), unexpectedly found in Spain and restored thanks to the heroic efforts of a group of true cinema lovers. */ + overview?: string; + /** + * @default 0 + * @example 6.007 + */ + popularity: number; + /** @example /zHNNT9gfiGsuadR6x38KYOp6ekq.jpg */ + poster_path?: string; + /** @example 2011-12-08 */ + release_date?: string; + /** @example The Extraordinary Voyage */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 7.6 + */ + vote_average: number; + /** + * @default 0 + * @example 47 + */ + vote_count: number; + /** @example 5d818a63d34eb3002c4f8fea */ + credit_id?: string; + /** @example Crew */ + department?: string; + /** @example Thanks */ + job?: string; + /** @example movie */ + media_type?: string; + }[]; + /** + * @default 0 + * @example 31 + */ + id: number; + }; + }; + }; + }; + }; + 'person-external-ids': { + parameters: { + query?: never; + header?: never; + path: { + person_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 31 + */ + id: number; + /** @example /m/0bxtg */ + freebase_mid?: string; + /** @example /en/tom_hanks */ + freebase_id?: string; + /** @example nm0000158 */ + imdb_id?: string; + /** + * @default 0 + * @example 14293 + */ + tvrage_id: number; + /** @example Q2263 */ + wikidata_id?: string; + /** @example TomHanks */ + facebook_id?: string; + /** @example tomhanks */ + instagram_id?: string; + /** @example tomhanks */ + tiktok_id?: string; + /** @example tomhanks */ + twitter_id?: string; + youtube_id?: unknown; + }; + }; + }; + }; + }; + 'person-images': { + parameters: { + query?: never; + header?: never; + path: { + person_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 287 + */ + id: number; + profiles?: { + /** + * @default 0 + * @example 0.666 + */ + aspect_ratio: number; + /** + * @default 0 + * @example 980 + */ + height: number; + iso_639_1?: unknown; + /** @example /cckcYc2v0yh1tc9QjRelptcOBko.jpg */ + file_path?: string; + /** + * @default 0 + * @example 5.288 + */ + vote_average: number; + /** + * @default 0 + * @example 89 + */ + vote_count: number; + /** + * @default 0 + * @example 653 + */ + width: number; + }[]; + }; + }; + }; + }; + }; + 'person-latest-id': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default true + * @example false + */ + adult: boolean; + also_known_as?: unknown[]; + /** @example */ + biography?: string; + birthday?: unknown; + deathday?: unknown; + /** + * @default 0 + * @example 0 + */ + gender: number; + homepage?: unknown; + /** + * @default 0 + * @example 4064343 + */ + id: number; + imdb_id?: unknown; + known_for_department?: unknown; + /** @example Ángel Cruz */ + name?: string; + place_of_birth?: unknown; + /** + * @default 0 + * @example 0 + */ + popularity: number; + profile_path?: unknown; + }; + }; + }; + }; + }; + 'person-movie-credits': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path: { + person_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + cast?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /3h1JZGDhZ8nzxdgvkxha0qBqi05.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 13 + */ + id: number; + /** @example en */ + original_language?: string; + /** @example Forrest Gump */ + original_title?: string; + /** @example A man with a low IQ has accomplished great things in his life and been present during significant historic events—in each case, far exceeding what anyone imagined he could do. But despite all he has achieved, his one true love eludes him. */ + overview?: string; + /** + * @default 0 + * @example 62.225 + */ + popularity: number; + /** @example /arw2vcBveWOVZr6pxd9XTd1TdQa.jpg */ + poster_path?: string; + /** @example 1994-06-23 */ + release_date?: string; + /** @example Forrest Gump */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 8.481 + */ + vote_average: number; + /** + * @default 0 + * @example 24535 + */ + vote_count: number; + /** @example Forrest Gump */ + character?: string; + /** @example 52fe420ec3a36847f800074f */ + credit_id?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + crew?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /tx3uj8GPWf5pzb0gWATJ4bokNHI.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 87061 + */ + id: number; + /** @example fr */ + original_language?: string; + /** @example Le Voyage extraordinaire */ + original_title?: string; + /** @example An account of the extraordinary life of film pioneer Georges Méliès (1861-1938) and the amazing story of the copy in color of his masterpiece “A Trip to the Moon” (1902), unexpectedly found in Spain and restored thanks to the heroic efforts of a group of true cinema lovers. */ + overview?: string; + /** + * @default 0 + * @example 6.007 + */ + popularity: number; + /** @example /zHNNT9gfiGsuadR6x38KYOp6ekq.jpg */ + poster_path?: string; + /** @example 2011-12-08 */ + release_date?: string; + /** @example The Extraordinary Voyage */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 7.6 + */ + vote_average: number; + /** + * @default 0 + * @example 47 + */ + vote_count: number; + /** @example 5d818a63d34eb3002c4f8fea */ + credit_id?: string; + /** @example Crew */ + department?: string; + /** @example Thanks */ + job?: string; + }[]; + /** + * @default 0 + * @example 31 + */ + id: number; + }; + }; + }; + }; + }; + 'person-tv-credits': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path: { + person_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + cast?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /ttvojTMgaIN7U8gqB5LlNqO4vPN.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 1900 + */ + id: number; + origin_country?: string[]; + /** @example en */ + original_language?: string; + /** @example LIVE with Kelly and Mark */ + original_name?: string; + /** @example A morning talk show with A-list celebrity guests, top-notch performances and one-of-a-kind segments that are unrivaled on daytime television, plus spontaneous, hilarious and unpredictable talk. */ + overview?: string; + /** + * @default 0 + * @example 700.508 + */ + popularity: number; + /** @example /l5y8egG27p2fSTyq8s21SQMmQLy.jpg */ + poster_path?: string; + /** @example 1988-09-05 */ + first_air_date?: string; + /** @example LIVE with Kelly and Mark */ + name?: string; + /** + * @default 0 + * @example 5.4 + */ + vote_average: number; + /** + * @default 0 + * @example 25 + */ + vote_count: number; + /** @example */ + character?: string; + /** @example 52571af019c29571140d5c92 */ + credit_id?: string; + /** + * @default 0 + * @example 1 + */ + episode_count: number; + }[]; + crew?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /6uMA6EAiwcsCqQJwWgYwtORvE0v.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 2391 + */ + id: number; + origin_country?: string[]; + /** @example en */ + original_language?: string; + /** @example Tales from the Crypt */ + original_name?: string; + /** @example Cadaverous scream legend the Crypt Keeper is your macabre host for these forays of fright and fun based on the classic E.C. Comics tales from back in the day. So shamble up to the bar and pick your poison. Will it be an insane Santa on a personal slay ride? Honeymooners out to fulfill the "til death do we part" vow ASAP? */ + overview?: string; + /** + * @default 0 + * @example 24.88 + */ + popularity: number; + /** @example /dDfXQH6Kg2JNASI0dqNALukjhk1.jpg */ + poster_path?: string; + /** @example 1989-06-10 */ + first_air_date?: string; + /** @example Tales from the Crypt */ + name?: string; + /** + * @default 0 + * @example 7.978 + */ + vote_average: number; + /** + * @default 0 + * @example 757 + */ + vote_count: number; + /** @example 525734f3760ee3776a397211 */ + credit_id?: string; + /** @example Directing */ + department?: string; + /** + * @default 0 + * @example 1 + */ + episode_count: number; + /** @example Director */ + job?: string; + }[]; + /** + * @default 0 + * @example 31 + */ + id: number; + }; + }; + }; + }; + }; + 'person-tagged-images': { + parameters: { + query?: { + page?: number; + }; + header?: never; + path: { + person_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 31 + */ + id: number; + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default 0 + * @example 0.6666666666666666 + */ + aspect_ratio: number; + /** @example /1wY4psJ5NVEhCuOYROwLH2XExM2.jpg */ + file_path?: string; + /** + * @default 0 + * @example 1500 + */ + height: number; + /** @example 5b235d740e0a265b5d0031d9 */ + id?: string; + /** @example en */ + iso_639_1?: string; + /** + * @default 0 + * @example 5.456 + */ + vote_average: number; + /** + * @default 0 + * @example 7 + */ + vote_count: number; + /** + * @default 0 + * @example 1000 + */ + width: number; + /** @example poster */ + image_type?: string; + media?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /bdD39MpSVhKjxarTxLSfX6baoMP.jpg */ + backdrop_path?: string; + /** + * @default 0 + * @example 857 + */ + id: number; + /** @example Saving Private Ryan */ + title?: string; + /** @example en */ + original_language?: string; + /** @example Saving Private Ryan */ + original_title?: string; + /** @example As U.S. troops storm the beaches of Normandy, three brothers lie dead on the battlefield, with a fourth trapped behind enemy lines. Ranger captain John Miller and seven men are tasked with penetrating German-held territory and bringing the boy home. */ + overview?: string; + /** @example /uqx37cS8cpHg8U35f9U5IBlrCV3.jpg */ + poster_path?: string; + /** @example movie */ + media_type?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 70.45 + */ + popularity: number; + /** @example 1998-07-24 */ + release_date?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 8.208 + */ + vote_average: number; + /** + * @default 0 + * @example 14134 + */ + vote_count: number; + }; + /** @example movie */ + media_type?: string; + }[]; + /** + * @default 0 + * @example 1 + */ + total_pages: number; + /** + * @default 0 + * @example 13 + */ + total_results: number; + }; + }; + }; + }; + }; + translations: { + parameters: { + query?: never; + header?: never; + path: { + person_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 31 + */ + id: number; + translations?: { + /** @example US */ + iso_3166_1?: string; + /** @example en */ + iso_639_1?: string; + /** @example English */ + name?: string; + /** @example English */ + english_name?: string; + data?: { + /** + * @example Thomas Jeffrey Hanks (born July 9, 1956) is an American actor and filmmaker. Known for both his comedic and dramatic roles, Hanks is one of the most popular and recognizable film stars worldwide, and is widely regarded as an American cultural icon. + * + * Hanks made his breakthrough with leading roles in the comedies Splash (1984) and Big (1988). He won two consecutive Academy Awards for Best Actor for starring as a gay lawyer suffering from AIDS in Philadelphia (1993) and a young man with below-average IQ in Forrest Gump (1994). Hanks collaborated with film director Steven Spielberg on five films: Saving Private Ryan (1998), Catch Me If You Can (2002), The Terminal (2004), Bridge of Spies (2015), and The Post (2017), as well as the 2001 miniseries Band of Brothers, which launched him as a director, producer, and screenwriter. + * + * Hanks' other notable films include the romantic comedies Sleepless in Seattle (1993) and You've Got Mail (1998); the dramas Apollo 13 (1995), The Green Mile (1999), Cast Away (2000), Road to Perdition (2002), and Cloud Atlas (2012); and the biographical dramas Saving Mr. Banks (2013), Captain Phillips (2013), Sully (2016), and A Beautiful Day in the Neighborhood (2019). He has also appeared as the title character in the Robert Langdon film series, and has voiced Sheriff Woody in the Toy Story film series. + * + * Description above from the Wikipedia article Tom Hanks, licensed under CC-BY-SA, full list of contributors on Wikipedia. + */ + biography?: string; + /** @example Tom Hanks */ + name?: string; + }; + }[]; + }; + }; + }; + }; + }; + 'review-details': { + parameters: { + query?: never; + header?: never; + path: { + review_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** @example 640b2aeecaaca20079decdcc */ + id?: string; + /** @example Ricardo Oliveira */ + author?: string; + author_details?: { + /** @example Ricardo Oliveira */ + name?: string; + /** @example RSOliveira */ + username?: string; + /** @example /23Cl7rhsknc7IIAcZZAGKzovjTu.jpg */ + avatar_path?: string; + /** + * @default 0 + * @example 9 + */ + rating: number; + }; + /** + * @example "The Last of Us" is a post-apocalyptic TV series based on the popular video game of the same name. The story follows the journey of Joel, a smuggler, and Ellie, a teenage girl who may be the key to finding a cure for a deadly fungal infection that has ravaged the world. + * + * The series features outstanding performances from Pedro Pascal as Joel, Bella Ramsey as Ellie, and Anna Torv as Tess. The chemistry between the main characters is excellent, and the casting is spot-on. + * + * The show's writing is superb, and it captures the essence of the video game while adding a fresh perspective. The narrative is engaging, and the pacing is just right, with each episode leaving you on the edge of your seat, eager to see what happens next. + * + * The show's production value is top-notch, with stunning visuals and cinematography that capture the bleak and haunting atmosphere of a post-apocalyptic world. The use of practical effects and makeup is impressive and adds to the overall immersion of the story. + * + * Overall, "The Last of Us" is an outstanding TV series that does justice to the source material. It's a must-watch for fans of the video game and anyone who enjoys gripping and emotional storytelling. I would rate it a 9 out of 10. + * + * + * + * Written and Reviewed by RSOliveira + */ + content?: string; + /** @example 2023-03-10T13:04:46.674Z */ + created_at?: string; + /** @example en */ + iso_639_1?: string; + /** + * @default 0 + * @example 100088 + */ + media_id: number; + /** @example The Last of Us */ + media_title?: string; + /** @example tv */ + media_type?: string; + /** @example 2023-03-10T13:04:46.734Z */ + updated_at?: string; + /** @example https://www.themoviedb.org/review/640b2aeecaaca20079decdcc */ + url?: string; + }; + }; + }; + }; + }; + 'search-collection': { + parameters: { + query: { + query: string; + include_adult?: boolean; + language?: string; + page?: number; + region?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /zuW6fOiusv4X9nnW3paHGfXcSll.jpg */ + backdrop_path?: string; + /** + * @default 0 + * @example 86311 + */ + id: number; + /** @example The Avengers Collection */ + name?: string; + /** @example en */ + original_language?: string; + /** @example The Avengers Collection */ + original_name?: string; + /** @example A superhero film series produced by Marvel Studios based on the Marvel Comics superhero team of the same name, and part of the Marvel Cinematic Universe (MCU). The series features an ensemble cast from the Marvel Cinematic Universe series films, as they join forces for the peacekeeping organization S.H.I.E.L.D. led by Nick Fury. */ + overview?: string; + /** @example /yFSIUVTCvgYrpalUktulvk3Gi5Y.jpg */ + poster_path?: string; + }[]; + /** + * @default 0 + * @example 1 + */ + total_pages: number; + /** + * @default 0 + * @example 1 + */ + total_results: number; + }; + }; + }; + }; + }; + 'search-company': { + parameters: { + query: { + query: string; + page?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default 0 + * @example 3268 + */ + id: number; + /** @example /tuomPhY2UtuPTqqFnKMVHvSb724.png */ + logo_path?: string; + /** @example HBO */ + name?: string; + /** @example US */ + origin_country?: string; + }[]; + /** + * @default 0 + * @example 2 + */ + total_pages: number; + /** + * @default 0 + * @example 22 + */ + total_results: number; + }; + }; + }; + }; + }; + 'search-keyword': { + parameters: { + query: { + query: string; + page?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default 0 + * @example 262419 + */ + id: number; + /** @example lost */ + name?: string; + }[]; + /** + * @default 0 + * @example 5 + */ + total_pages: number; + /** + * @default 0 + * @example 84 + */ + total_results: number; + }; + }; + }; + }; + }; + 'search-movie': { + parameters: { + query: { + query: string; + include_adult?: boolean; + language?: string; + primary_release_year?: string; + page?: number; + region?: string; + year?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /hZkgoQYus5vegHoetLkCJzb17zJ.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 550 + */ + id: number; + /** @example en */ + original_language?: string; + /** @example Fight Club */ + original_title?: string; + /** @example A ticking-time-bomb insomniac and a slippery soap salesman channel primal male aggression into a shocking new form of therapy. Their concept catches on, with underground "fight clubs" forming in every town, until an eccentric gets in the way and ignites an out-of-control spiral toward oblivion. */ + overview?: string; + /** + * @default 0 + * @example 73.433 + */ + popularity: number; + /** @example /pB8BM7pdSp6B6Ih7QZ4DrQ3PmJK.jpg */ + poster_path?: string; + /** @example 1999-10-15 */ + release_date?: string; + /** @example Fight Club */ + title?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 8.433 + */ + vote_average: number; + /** + * @default 0 + * @example 26279 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 2 + */ + total_pages: number; + /** + * @default 0 + * @example 39 + */ + total_results: number; + }; + }; + }; + }; + }; + 'search-multi': { + parameters: { + query: { + query: string; + include_adult?: boolean; + language?: string; + page?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /aDYSnJAK0BTVeE8osOy22Kz3SXY.jpg */ + backdrop_path?: string; + /** + * @default 0 + * @example 11 + */ + id: number; + /** @example Star Wars */ + title?: string; + /** @example en */ + original_language?: string; + /** @example Star Wars */ + original_title?: string; + /** @example Princess Leia is captured and held hostage by the evil Imperial forces in their effort to take over the galactic Empire. Venturesome Luke Skywalker and dashing captain Han Solo team together with the loveable robot duo R2-D2 and C-3PO to rescue the beautiful princess and restore peace and justice in the Empire. */ + overview?: string; + /** @example /6FfCtAuVAW8XJjZ7eWeLibRLWTw.jpg */ + poster_path?: string; + /** @example movie */ + media_type?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 78.047 + */ + popularity: number; + /** @example 1977-05-25 */ + release_date?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 8.208 + */ + vote_average: number; + /** + * @default 0 + * @example 18528 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 11 + */ + total_pages: number; + /** + * @default 0 + * @example 201 + */ + total_results: number; + }; + }; + }; + }; + }; + 'search-person': { + parameters: { + query: { + query: string; + include_adult?: boolean; + language?: string; + page?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** + * @default 0 + * @example 31 + */ + id: number; + /** @example Acting */ + known_for_department?: string; + /** @example Tom Hanks */ + name?: string; + /** @example Tom Hanks */ + original_name?: string; + /** + * @default 0 + * @example 84.631 + */ + popularity: number; + /** @example /xndWFsBlClOJFRdhSt4NBwiPq2o.jpg */ + profile_path?: string; + known_for?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /3h1JZGDhZ8nzxdgvkxha0qBqi05.jpg */ + backdrop_path?: string; + /** + * @default 0 + * @example 13 + */ + id: number; + /** @example Forrest Gump */ + title?: string; + /** @example en */ + original_language?: string; + /** @example Forrest Gump */ + original_title?: string; + /** @example A man with a low IQ has accomplished great things in his life and been present during significant historic events—in each case, far exceeding what anyone imagined he could do. But despite all he has achieved, his one true love eludes him. */ + overview?: string; + /** @example /arw2vcBveWOVZr6pxd9XTd1TdQa.jpg */ + poster_path?: string; + /** @example movie */ + media_type?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 67.209 + */ + popularity: number; + /** @example 1994-06-23 */ + release_date?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 8.481 + */ + vote_average: number; + /** + * @default 0 + * @example 24525 + */ + vote_count: number; + }[]; + }[]; + /** + * @default 0 + * @example 1 + */ + total_pages: number; + /** + * @default 0 + * @example 1 + */ + total_results: number; + }; + }; + }; + }; + }; + 'search-tv': { + parameters: { + query: { + query: string; + /** @description Search only the first air date. Valid values are: 1000..9999 */ + first_air_date_year?: number; + include_adult?: boolean; + language?: string; + page?: number; + /** @description Search the first air date and all episode air dates. Valid values are: 1000..9999 */ + year?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /bsNm9z2TJfe0WO3RedPGWQ8mG1X.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 1396 + */ + id: number; + origin_country?: string[]; + /** @example en */ + original_language?: string; + /** @example Breaking Bad */ + original_name?: string; + /** @example When Walter White, a New Mexico chemistry teacher, is diagnosed with Stage III cancer and given a prognosis of only two years left to live. He becomes filled with a sense of fearlessness and an unrelenting desire to secure his family's financial future at any cost as he enters the dangerous world of drugs and crime. */ + overview?: string; + /** + * @default 0 + * @example 298.884 + */ + popularity: number; + /** @example /ggFHVNu6YYI5L9pCfOacjizRGt.jpg */ + poster_path?: string; + /** @example 2008-01-20 */ + first_air_date?: string; + /** @example Breaking Bad */ + name?: string; + /** + * @default 0 + * @example 8.879 + */ + vote_average: number; + /** + * @default 0 + * @example 11536 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 1 + */ + total_pages: number; + /** + * @default 0 + * @example 1 + */ + total_results: number; + }; + }; + }; + }; + }; + 'trending-all': { + parameters: { + query?: { + /** @description `ISO-639-1`-`ISO-3166-1` code */ + language?: string; + }; + header?: never; + path: { + time_window: 'day' | 'week'; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /44immBwzhDVyjn87b3x3l9mlhAD.jpg */ + backdrop_path?: string; + /** + * @default 0 + * @example 934433 + */ + id: number; + /** @example Scream VI */ + title?: string; + /** @example en */ + original_language?: string; + /** @example Scream VI */ + original_title?: string; + /** @example Following the latest Ghostface killings, the four survivors leave Woodsboro behind and start a fresh chapter. */ + overview?: string; + /** @example /wDWwtvkRRlgTiUr6TyLSMX8FCuZ.jpg */ + poster_path?: string; + /** @example movie */ + media_type?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 609.941 + */ + popularity: number; + /** @example 2023-03-08 */ + release_date?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 7.374 + */ + vote_average: number; + /** + * @default 0 + * @example 684 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 1000 + */ + total_pages: number; + /** + * @default 0 + * @example 20000 + */ + total_results: number; + }; + }; + }; + }; + }; + 'trending-movies': { + parameters: { + query?: { + /** @description `ISO-639-1`-`ISO-3166-1` code */ + language?: string; + }; + header?: never; + path: { + time_window: 'day' | 'week'; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /44immBwzhDVyjn87b3x3l9mlhAD.jpg */ + backdrop_path?: string; + /** + * @default 0 + * @example 934433 + */ + id: number; + /** @example Scream VI */ + title?: string; + /** @example en */ + original_language?: string; + /** @example Scream VI */ + original_title?: string; + /** @example Following the latest Ghostface killings, the four survivors leave Woodsboro behind and start a fresh chapter. */ + overview?: string; + /** @example /wDWwtvkRRlgTiUr6TyLSMX8FCuZ.jpg */ + poster_path?: string; + /** @example movie */ + media_type?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 609.941 + */ + popularity: number; + /** @example 2023-03-08 */ + release_date?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 7.374 + */ + vote_average: number; + /** + * @default 0 + * @example 684 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 1000 + */ + total_pages: number; + /** + * @default 0 + * @example 20000 + */ + total_results: number; + }; + }; + }; + }; + }; + 'trending-people': { + parameters: { + query?: { + /** @description `ISO-639-1`-`ISO-3166-1` code */ + language?: string; + }; + header?: never; + path: { + time_window: 'day' | 'week'; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 224513 + */ + id: number; + /** @example Ana de Armas */ + name?: string; + /** @example Ana de Armas */ + original_name?: string; + /** @example person */ + media_type?: string; + /** + * @default 0 + * @example 349.766 + */ + popularity: number; + /** + * @default 0 + * @example 1 + */ + gender: number; + /** @example Acting */ + known_for_department?: string; + /** @example /3vxvsmYLTf4jnr163SUlBIw51ee.jpg */ + profile_path?: string; + known_for?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /ilRyazdMJwN05exqhwK4tMKBYZs.jpg */ + backdrop_path?: string; + /** + * @default 0 + * @example 335984 + */ + id: number; + /** @example Blade Runner 2049 */ + title?: string; + /** @example en */ + original_language?: string; + /** @example Blade Runner 2049 */ + original_title?: string; + /** @example Thirty years after the events of the first film, a new blade runner, LAPD Officer K, unearths a long-buried secret that has the potential to plunge what's left of society into chaos. K's discovery leads him on a quest to find Rick Deckard, a former LAPD blade runner who has been missing for 30 years. */ + overview?: string; + /** @example /gajva2L0rPYkEWjzgFlBXCAVBE5.jpg */ + poster_path?: string; + /** @example movie */ + media_type?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 79.571 + */ + popularity: number; + /** @example 2017-10-04 */ + release_date?: string; + /** + * @default true + * @example false + */ + video: boolean; + /** + * @default 0 + * @example 7.531 + */ + vote_average: number; + /** + * @default 0 + * @example 11771 + */ + vote_count: number; + }[]; + }[]; + /** + * @default 0 + * @example 1000 + */ + total_pages: number; + /** + * @default 0 + * @example 20000 + */ + total_results: number; + }; + }; + }; + }; + }; + 'trending-tv': { + parameters: { + query?: { + /** @description `ISO-639-1`-`ISO-3166-1` code */ + language?: string; + }; + header?: never; + path: { + time_window: 'day' | 'week'; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /8P15FsYcTwQZ4G5rRMd1TKD14Aq.jpg */ + backdrop_path?: string; + /** + * @default 0 + * @example 103768 + */ + id: number; + /** @example Sweet Tooth */ + name?: string; + /** @example en */ + original_language?: string; + /** @example Sweet Tooth */ + original_name?: string; + /** @example On a perilous adventure across a post-apocalyptic world, a lovable boy who's half-human and half-deer searches for a new beginning with a gruff protector. */ + overview?: string; + /** @example /dBxxtfhC4vYrxB2fLsSxOTY2dQc.jpg */ + poster_path?: string; + /** @example tv */ + media_type?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 137.498 + */ + popularity: number; + /** @example 2021-06-04 */ + first_air_date?: string; + /** + * @default 0 + * @example 7.928 + */ + vote_average: number; + /** + * @default 0 + * @example 1094 + */ + vote_count: number; + origin_country?: string[]; + }[]; + /** + * @default 0 + * @example 1000 + */ + total_pages: number; + /** + * @default 0 + * @example 20000 + */ + total_results: number; + }; + }; + }; + }; + }; + 'tv-series-airing-today-list': { + parameters: { + query?: { + language?: string; + page?: number; + timezone?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** @example /mAJ84W6I8I272Da87qplS2Dp9ST.jpg */ + backdrop_path?: string; + /** @example 2023-01-23 */ + first_air_date?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 202250 + */ + id: number; + /** @example Dirty Linen */ + name?: string; + origin_country?: string[]; + /** @example tl */ + original_language?: string; + /** @example Dirty Linen */ + original_name?: string; + /** @example To exact vengeance, a young woman infiltrates the household of an influential family as a housemaid to expose their dirty secrets. However, love will get in the way of her revenge plot. */ + overview?: string; + /** + * @default 0 + * @example 2797.914 + */ + popularity: number; + /** @example /aoAZgnmMzY9vVy9VWnO3U5PZENh.jpg */ + poster_path?: string; + /** + * @default 0 + * @example 5 + */ + vote_average: number; + /** + * @default 0 + * @example 13 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 14 + */ + total_pages: number; + /** + * @default 0 + * @example 265 + */ + total_results: number; + }; + }; + }; + }; + }; + 'tv-series-on-the-air-list': { + parameters: { + query?: { + language?: string; + page?: number; + timezone?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** @example /mAJ84W6I8I272Da87qplS2Dp9ST.jpg */ + backdrop_path?: string; + /** @example 2023-01-23 */ + first_air_date?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 202250 + */ + id: number; + /** @example Dirty Linen */ + name?: string; + origin_country?: string[]; + /** @example tl */ + original_language?: string; + /** @example Dirty Linen */ + original_name?: string; + /** @example To exact vengeance, a young woman infiltrates the household of an influential family as a housemaid to expose their dirty secrets. However, love will get in the way of her revenge plot. */ + overview?: string; + /** + * @default 0 + * @example 2797.914 + */ + popularity: number; + /** @example /aoAZgnmMzY9vVy9VWnO3U5PZENh.jpg */ + poster_path?: string; + /** + * @default 0 + * @example 5 + */ + vote_average: number; + /** + * @default 0 + * @example 13 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 58 + */ + total_pages: number; + /** + * @default 0 + * @example 1151 + */ + total_results: number; + }; + }; + }; + }; + }; + 'tv-series-popular-list': { + parameters: { + query?: { + language?: string; + page?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** @example /mAJ84W6I8I272Da87qplS2Dp9ST.jpg */ + backdrop_path?: string; + /** @example 2023-01-23 */ + first_air_date?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 202250 + */ + id: number; + /** @example Dirty Linen */ + name?: string; + origin_country?: string[]; + /** @example tl */ + original_language?: string; + /** @example Dirty Linen */ + original_name?: string; + /** @example To exact vengeance, a young woman infiltrates the household of an influential family as a housemaid to expose their dirty secrets. However, love will get in the way of her revenge plot. */ + overview?: string; + /** + * @default 0 + * @example 2797.914 + */ + popularity: number; + /** @example /aoAZgnmMzY9vVy9VWnO3U5PZENh.jpg */ + poster_path?: string; + /** + * @default 0 + * @example 5 + */ + vote_average: number; + /** + * @default 0 + * @example 13 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 7416 + */ + total_pages: number; + /** + * @default 0 + * @example 148302 + */ + total_results: number; + }; + }; + }; + }; + }; + 'tv-series-top-rated-list': { + parameters: { + query?: { + language?: string; + page?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** @example /99vBORZixICa32Pwdwj0lWcr8K.jpg */ + backdrop_path?: string; + /** @example 2021-09-03 */ + first_air_date?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 130392 + */ + id: number; + /** @example The D'Amelio Show */ + name?: string; + origin_country?: string[]; + /** @example en */ + original_language?: string; + /** @example The D'Amelio Show */ + original_name?: string; + /** @example From relative obscurity and a seemingly normal life, to overnight success and thrust into the Hollywood limelight overnight, the D’Amelios are faced with new challenges and opportunities they could not have imagined. */ + overview?: string; + /** + * @default 0 + * @example 12.459 + */ + popularity: number; + /** @example /phv2Jc4H8cvRzvTKb9X1uKMboTu.jpg */ + poster_path?: string; + /** + * @default 0 + * @example 8.9 + */ + vote_average: number; + /** + * @default 0 + * @example 3190 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 142 + */ + total_pages: number; + /** + * @default 0 + * @example 2833 + */ + total_results: number; + }; + }; + }; + }; + }; + 'tv-series-details': { + parameters: { + query?: { + /** @description comma separated list of endpoints within this namespace, 20 items max */ + append_to_response?: string; + language?: string; + }; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /6LWy0jvMpmjoS9fojNgHIKoWL05.jpg */ + backdrop_path?: string; + created_by?: { + /** + * @default 0 + * @example 9813 + */ + id: number; + /** @example 5256c8c219c2956ff604858a */ + credit_id?: string; + /** @example David Benioff */ + name?: string; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** @example /xvNN5huL0X8yJ7h3IZfGG4O2zBD.jpg */ + profile_path?: string; + }[]; + episode_run_time?: number[]; + /** @example 2011-04-17 */ + first_air_date?: string; + genres?: { + /** + * @default 0 + * @example 10765 + */ + id: number; + /** @example Sci-Fi & Fantasy */ + name?: string; + }[]; + /** @example http://www.hbo.com/game-of-thrones */ + homepage?: string; + /** + * @default 0 + * @example 1399 + */ + id: number; + /** + * @default true + * @example false + */ + in_production: boolean; + languages?: string[]; + /** @example 2019-05-19 */ + last_air_date?: string; + last_episode_to_air?: { + /** + * @default 0 + * @example 1551830 + */ + id: number; + /** @example The Iron Throne */ + name?: string; + /** @example In the aftermath of the devastating attack on King's Landing, Daenerys must face the survivors. */ + overview?: string; + /** + * @default 0 + * @example 4.809 + */ + vote_average: number; + /** + * @default 0 + * @example 241 + */ + vote_count: number; + /** @example 2019-05-19 */ + air_date?: string; + /** + * @default 0 + * @example 6 + */ + episode_number: number; + /** @example 806 */ + production_code?: string; + /** + * @default 0 + * @example 80 + */ + runtime: number; + /** + * @default 0 + * @example 8 + */ + season_number: number; + /** + * @default 0 + * @example 1399 + */ + show_id: number; + /** @example /zBi2O5EJfgTS6Ae0HdAYLm9o2nf.jpg */ + still_path?: string; + }; + /** @example Game of Thrones */ + name?: string; + next_episode_to_air?: unknown; + networks?: { + /** + * @default 0 + * @example 49 + */ + id: number; + /** @example /tuomPhY2UtuPTqqFnKMVHvSb724.png */ + logo_path?: string; + /** @example HBO */ + name?: string; + /** @example US */ + origin_country?: string; + }[]; + /** + * @default 0 + * @example 73 + */ + number_of_episodes: number; + /** + * @default 0 + * @example 8 + */ + number_of_seasons: number; + origin_country?: string[]; + /** @example en */ + original_language?: string; + /** @example Game of Thrones */ + original_name?: string; + /** @example Seven noble families fight for control of the mythical land of Westeros. Friction between the houses leads to full-scale war. All while a very ancient evil awakens in the farthest north. Amidst the war, a neglected military order of misfits, the Night's Watch, is all that stands between the realms of men and icy horrors beyond. */ + overview?: string; + /** + * @default 0 + * @example 346.098 + */ + popularity: number; + /** @example /1XS1oqL89opfnbLl8WnZY1O1uJx.jpg */ + poster_path?: string; + production_companies?: { + /** + * @default 0 + * @example 76043 + */ + id: number; + /** @example /9RO2vbQ67otPrBLXCaC8UMp3Qat.png */ + logo_path?: string; + /** @example Revolution Sun Studios */ + name?: string; + /** @example US */ + origin_country?: string; + }[]; + production_countries?: { + /** @example GB */ + iso_3166_1?: string; + /** @example United Kingdom */ + name?: string; + }[]; + seasons?: { + /** @example 2010-12-05 */ + air_date?: string; + /** + * @default 0 + * @example 272 + */ + episode_count: number; + /** + * @default 0 + * @example 3627 + */ + id: number; + /** @example Specials */ + name?: string; + /** @example */ + overview?: string; + /** @example /kMTcwNRfFKCZ0O2OaBZS0nZ2AIe.jpg */ + poster_path?: string; + /** + * @default 0 + * @example 0 + */ + season_number: number; + /** + * @default 0 + * @example 0 + */ + vote_average: number; + }[]; + spoken_languages?: { + /** @example English */ + english_name?: string; + /** @example en */ + iso_639_1?: string; + /** @example English */ + name?: string; + }[]; + /** @example Ended */ + status?: string; + /** @example Winter Is Coming */ + tagline?: string; + /** @example Scripted */ + type?: string; + /** + * @default 0 + * @example 8.438 + */ + vote_average: number; + /** + * @default 0 + * @example 21390 + */ + vote_count: number; + }; + }; + }; + }; + }; + 'tv-series-account-states': { + parameters: { + query?: { + session_id?: string; + guest_session_id?: string; + }; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 550 + */ + id: number; + /** + * @default true + * @example true + */ + favorite: boolean; + rated?: { + /** + * @default 0 + * @example 9 + */ + value: number; + }; + /** + * @default true + * @example false + */ + watchlist: boolean; + }; + }; + }; + }; + }; + 'tv-series-aggregate-credits': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + cast?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 1 + */ + gender: number; + /** + * @default 0 + * @example 1223786 + */ + id: number; + /** @example Acting */ + known_for_department?: string; + /** @example Emilia Clarke */ + name?: string; + /** @example Emilia Clarke */ + original_name?: string; + /** + * @default 0 + * @example 42.737 + */ + popularity: number; + /** @example /u59kTmNHXzaGZqokivxLPiBVIML.jpg */ + profile_path?: string; + roles?: { + /** @example 5256c8af19c2956ff60479f6 */ + credit_id?: string; + /** @example Daenerys Targaryen */ + character?: string; + /** + * @default 0 + * @example 78 + */ + episode_count: number; + }[]; + /** + * @default 0 + * @example 78 + */ + total_episode_count: number; + /** + * @default 0 + * @example 6 + */ + order: number; + }[]; + crew?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 1 + */ + gender: number; + /** + * @default 0 + * @example 6411 + */ + id: number; + /** @example Art */ + known_for_department?: string; + /** @example Deborah Riley */ + name?: string; + /** @example Deborah Riley */ + original_name?: string; + /** + * @default 0 + * @example 1.4 + */ + popularity: number; + /** @example /cjhADpqdrnwB1PdDUKaBnWrIj2Q.jpg */ + profile_path?: string; + jobs?: { + /** @example 54eee9e5c3a3686d5800584e */ + credit_id?: string; + /** @example Production Design */ + job?: string; + /** + * @default 0 + * @example 43 + */ + episode_count: number; + }[]; + /** @example Art */ + department?: string; + /** + * @default 0 + * @example 43 + */ + total_episode_count: number; + }[]; + /** + * @default 0 + * @example 1399 + */ + id: number; + }; + }; + }; + }; + }; + 'tv-series-alternative-titles': { + parameters: { + query?: never; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1399 + */ + id: number; + results?: { + /** @example AL */ + iso_3166_1?: string; + /** @example Froni i shpatave */ + title?: string; + /** @example */ + type?: string; + }[]; + }; + }; + }; + }; + }; + 'tv-series-changes': { + parameters: { + query?: { + end_date?: string; + page?: number; + start_date?: string; + }; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + changes?: { + /** @example images */ + key?: string; + items?: { + /** @example 640435cf021cee0084710972 */ + id?: string; + /** @example updated */ + action?: string; + /** @example 2023-03-05 06:25:19 UTC */ + time?: string; + /** @example en */ + iso_639_1?: string; + /** @example */ + iso_3166_1?: string; + value?: { + poster?: { + /** @example /ouudK6RCNnsbT1CSXrlATXQIQTG.jpg */ + file_path?: string; + /** @example en */ + iso_639_1?: string; + }; + }; + original_value?: { + poster?: { + /** @example /ouudK6RCNnsbT1CSXrlATXQIQTG.jpg */ + file_path?: string; + /** @example fr */ + iso_639_1?: string; + }; + }; + }[]; + }[]; + }; + }; + }; + }; + }; + 'tv-series-content-ratings': { + parameters: { + query?: never; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + results?: { + descriptors?: unknown[]; + /** @example DE */ + iso_3166_1?: string; + /** @example 16 */ + rating?: string; + }[]; + /** + * @default 0 + * @example 1399 + */ + id: number; + }; + }; + }; + }; + }; + 'tv-series-credits': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + cast?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** + * @default 0 + * @example 22970 + */ + id: number; + /** @example Acting */ + known_for_department?: string; + /** @example Peter Dinklage */ + name?: string; + /** @example Peter Dinklage */ + original_name?: string; + /** + * @default 0 + * @example 30.6 + */ + popularity: number; + /** @example /lRsRgnksAhBRXwAB68MFjmTtLrk.jpg */ + profile_path?: string; + /** @example Tyrion Lannister */ + character?: string; + /** @example 5256c8b219c2956ff6047cd8 */ + credit_id?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + crew?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** + * @default 0 + * @example 1406855 + */ + id: number; + /** @example Production */ + known_for_department?: string; + /** @example Duncan Muggoch */ + name?: string; + /** @example Duncan Muggoch */ + original_name?: string; + /** + * @default 0 + * @example 1.592 + */ + popularity: number; + /** @example /ukGjJ62Ejd4cFziald03G34Fsrp.jpg */ + profile_path?: string; + /** @example 5ceab029c3a3682e93217a85 */ + credit_id?: string; + /** @example Production */ + department?: string; + /** @example Producer */ + job?: string; + }[]; + /** + * @default 0 + * @example 1399 + */ + id: number; + }; + }; + }; + }; + }; + 'tv-series-episode-groups': { + parameters: { + query?: never; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + results?: { + /** @example */ + description?: string; + /** + * @default 0 + * @example 102 + */ + episode_count: number; + /** + * @default 0 + * @example 9 + */ + group_count: number; + /** @example 5e9077d2e640d600151f32bd */ + id?: string; + /** @example Aired Order */ + name?: string; + network?: { + /** + * @default 0 + * @example 49 + */ + id: number; + /** @example /tuomPhY2UtuPTqqFnKMVHvSb724.png */ + logo_path?: string; + /** @example HBO */ + name?: string; + /** @example US */ + origin_country?: string; + }; + /** + * @default 0 + * @example 1 + */ + type: number; + }[]; + /** + * @default 0 + * @example 1399 + */ + id: number; + }; + }; + }; + }; + }; + 'tv-series-external-ids': { + parameters: { + query?: never; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1399 + */ + id: number; + /** @example tt0944947 */ + imdb_id?: string; + /** @example /m/0524b41 */ + freebase_mid?: string; + /** @example /en/game_of_thrones */ + freebase_id?: string; + /** + * @default 0 + * @example 121361 + */ + tvdb_id: number; + /** + * @default 0 + * @example 24493 + */ + tvrage_id: number; + /** @example Q23572 */ + wikidata_id?: string; + /** @example GameOfThrones */ + facebook_id?: string; + /** @example gameofthrones */ + instagram_id?: string; + /** @example GameOfThrones */ + twitter_id?: string; + }; + }; + }; + }; + }; + 'tv-series-images': { + parameters: { + query?: { + /** @description specify a comma separated list of ISO-639-1 values to query, for example: `en-US,null` */ + include_image_language?: string; + language?: string; + }; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + backdrops?: { + /** + * @default 0 + * @example 1.778 + */ + aspect_ratio: number; + /** + * @default 0 + * @example 800 + */ + height: number; + iso_639_1?: unknown; + /** @example /hZkgoQYus5vegHoetLkCJzb17zJ.jpg */ + file_path?: string; + /** + * @default 0 + * @example 5.622 + */ + vote_average: number; + /** + * @default 0 + * @example 20 + */ + vote_count: number; + /** + * @default 0 + * @example 1422 + */ + width: number; + }[]; + /** + * @default 0 + * @example 550 + */ + id: number; + logos?: { + /** + * @default 0 + * @example 5.203 + */ + aspect_ratio: number; + /** + * @default 0 + * @example 79 + */ + height: number; + /** @example he */ + iso_639_1?: string; + /** @example /c1KLulrIhUqY5fT42nmC5aERGCp.png */ + file_path?: string; + /** + * @default 0 + * @example 5.312 + */ + vote_average: number; + /** + * @default 0 + * @example 1 + */ + vote_count: number; + /** + * @default 0 + * @example 411 + */ + width: number; + }[]; + posters?: { + /** + * @default 0 + * @example 0.667 + */ + aspect_ratio: number; + /** + * @default 0 + * @example 900 + */ + height: number; + /** @example pt */ + iso_639_1?: string; + /** @example /r3pPehX4ik8NLYPpbDRAh0YRtMb.jpg */ + file_path?: string; + /** + * @default 0 + * @example 5.258 + */ + vote_average: number; + /** + * @default 0 + * @example 6 + */ + vote_count: number; + /** + * @default 0 + * @example 600 + */ + width: number; + }[]; + }; + }; + }; + }; + }; + 'tv-series-keywords': { + parameters: { + query?: never; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1399 + */ + id: number; + results?: { + /** @example based on novel or book */ + name?: string; + /** + * @default 0 + * @example 818 + */ + id: number; + }[]; + }; + }; + }; + }; + }; + 'tv-series-latest-id': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default true + * @example false + */ + adult: boolean; + backdrop_path?: unknown; + created_by?: unknown[]; + episode_run_time?: unknown[]; + /** @example */ + first_air_date?: string; + genres?: unknown[]; + /** @example */ + homepage?: string; + /** + * @default 0 + * @example 225491 + */ + id: number; + /** + * @default true + * @example true + */ + in_production: boolean; + languages?: unknown[]; + /** @example 2023-04-21 */ + last_air_date?: string; + last_episode_to_air?: { + /** + * @default 0 + * @example 4398801 + */ + id: number; + /** @example Episode 8 */ + name?: string; + /** @example */ + overview?: string; + /** + * @default 0 + * @example 0 + */ + vote_average: number; + /** + * @default 0 + * @example 0 + */ + vote_count: number; + /** @example 2023-04-21 */ + air_date?: string; + /** + * @default 0 + * @example 8 + */ + episode_number: number; + /** @example */ + production_code?: string; + runtime?: unknown; + /** + * @default 0 + * @example 1 + */ + season_number: number; + /** + * @default 0 + * @example 225491 + */ + show_id: number; + still_path?: unknown; + }; + /** @example 妖怪传 */ + name?: string; + next_episode_to_air?: unknown; + networks?: unknown[]; + /** + * @default 0 + * @example 1 + */ + number_of_episodes: number; + /** + * @default 0 + * @example 1 + */ + number_of_seasons: number; + origin_country?: string[]; + /** @example zh */ + original_language?: string; + /** @example 妖怪传 */ + original_name?: string; + /** @example */ + overview?: string; + /** + * @default 0 + * @example 0 + */ + popularity: number; + poster_path?: unknown; + production_companies?: unknown[]; + production_countries?: unknown[]; + seasons?: { + air_date?: unknown; + /** + * @default 0 + * @example 1 + */ + episode_count: number; + /** + * @default 0 + * @example 338956 + */ + id: number; + /** @example Season 1 */ + name?: string; + /** @example */ + overview?: string; + poster_path?: unknown; + /** + * @default 0 + * @example 1 + */ + season_number: number; + }[]; + spoken_languages?: unknown[]; + /** @example Returning Series */ + status?: string; + /** @example */ + tagline?: string; + /** @example Scripted */ + type?: string; + /** + * @default 0 + * @example 0 + */ + vote_average: number; + /** + * @default 0 + * @example 0 + */ + vote_count: number; + }; + }; + }; + }; + }; + 'lists-copy': { + parameters: { + query?: { + language?: string; + page?: number; + }; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1399 + */ + id: number; + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** @example */ + description?: string; + /** + * @default 0 + * @example 0 + */ + favorite_count: number; + /** + * @default 0 + * @example 8257231 + */ + id: number; + /** + * @default 0 + * @example 182 + */ + item_count: number; + /** @example en */ + iso_639_1?: string; + /** @example US */ + iso_3166_1?: string; + /** @example Done */ + name?: string; + poster_path?: unknown; + }[]; + /** + * @default 0 + * @example 96 + */ + total_pages: number; + /** + * @default 0 + * @example 1906 + */ + total_results: number; + }; + }; + }; + }; + }; + 'tv-series-recommendations': { + parameters: { + query?: { + language?: string; + page?: number; + }; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /bsNm9z2TJfe0WO3RedPGWQ8mG1X.jpg */ + backdrop_path?: string; + /** + * @default 0 + * @example 1396 + */ + id: number; + /** @example Breaking Bad */ + name?: string; + /** @example en */ + original_language?: string; + /** @example Breaking Bad */ + original_name?: string; + /** @example When Walter White, a New Mexico chemistry teacher, is diagnosed with Stage III cancer and given a prognosis of only two years left to live. He becomes filled with a sense of fearlessness and an unrelenting desire to secure his family's financial future at any cost as he enters the dangerous world of drugs and crime. */ + overview?: string; + /** @example /ggFHVNu6YYI5L9pCfOacjizRGt.jpg */ + poster_path?: string; + /** @example tv */ + media_type?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 292.904 + */ + popularity: number; + /** @example 2008-01-20 */ + first_air_date?: string; + /** + * @default 0 + * @example 8.878 + */ + vote_average: number; + /** + * @default 0 + * @example 11544 + */ + vote_count: number; + origin_country?: string[]; + }[]; + /** + * @default 0 + * @example 2 + */ + total_pages: number; + /** + * @default 0 + * @example 40 + */ + total_results: number; + }; + }; + }; + }; + }; + 'tv-series-reviews': { + parameters: { + query?: { + language?: string; + page?: number; + }; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1399 + */ + id: number; + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** @example lmao7 */ + author?: string; + author_details?: { + /** @example lmao7 */ + name?: string; + /** @example lmao7 */ + username?: string; + /** @example /ekmYOUU4tfx9zGGadjRdE7UPce.jpg */ + avatar_path?: string; + /** + * @default 0 + * @example 9 + */ + rating: number; + }; + /** + * @example I started watching when it came out as I heard that fans of LOTR also liked this. I stopped watching after Season 1 as I was devastated lol kinda. Only 2015 I decided to continue watching and got addicted like it seemed complicated at first, too many stories and characters. I even used a guide from internet like family tree per house while watching or GOT wiki so I can have more background on the characters. For a TV series, this show can really take you to a different world and never knowing what will happen. It is very daring that any time anybody can just die (I learned not to be attached and have accepted that they will all die so I won't be devastated hehe). I have never read the books but the show is entertaining and you will really root for your faves and really hate on those you hate. + * + * Fantasy, action, drama, comedy, love...and lots of surprises! + */ + content?: string; + /** @example 2017-02-20T05:47:28.872Z */ + created_at?: string; + /** @example 58aa82f09251416f92006a3a */ + id?: string; + /** @example 2021-06-23T15:57:54.649Z */ + updated_at?: string; + /** @example https://www.themoviedb.org/review/58aa82f09251416f92006a3a */ + url?: string; + }[]; + /** + * @default 0 + * @example 1 + */ + total_pages: number; + /** + * @default 0 + * @example 11 + */ + total_results: number; + }; + }; + }; + }; + }; + 'tv-series-screened-theatrically': { + parameters: { + query?: never; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1399 + */ + id: number; + results?: { + /** + * @default 0 + * @example 1159054 + */ + id: number; + /** + * @default 0 + * @example 10 + */ + episode_number: number; + /** + * @default 0 + * @example 5 + */ + season_number: number; + }[]; + }; + }; + }; + }; + }; + 'tv-series-similar': { + parameters: { + query?: { + language?: string; + page?: number; + }; + header?: never; + path: { + series_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + page: number; + results?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** @example /zcFSvWa34nDn2NcqOPuthyOIBWT.jpg */ + backdrop_path?: string; + genre_ids?: number[]; + /** + * @default 0 + * @example 197063 + */ + id: number; + origin_country?: string[]; + /** @example ko */ + original_language?: string; + /** @example 종이달 */ + original_name?: string; + /** @example A thriller drama about Yoo I-hwa, a stay-at-home mom living her comfortable and contented life without desires, but to her husband's indifference. While working as a bank contract employee, she unexpectedly touches money from VIP clients and gradually falls into an irreversible collapse. */ + overview?: string; + /** + * @default 0 + * @example 12.299 + */ + popularity: number; + /** @example /xXWynVdMGyJXBUDvIN27AXM3iJJ.jpg */ + poster_path?: string; + /** @example 2023-04-10 */ + first_air_date?: string; + /** @example Pale Moon */ + name?: string; + /** + * @default 0 + * @example 7 + */ + vote_average: number; + /** + * @default 0 + * @example 2 + */ + vote_count: number; + }[]; + /** + * @default 0 + * @example 82 + */ + total_pages: number; + /** + * @default 0 + * @example 1639 + */ + total_results: number; + }; + }; + }; + }; + }; + 'tv-series-translations': { + parameters: { + query?: never; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1399 + */ + id: number; + translations?: { + /** @example SA */ + iso_3166_1?: string; + /** @example ar */ + iso_639_1?: string; + /** @example العربية */ + name?: string; + /** @example Arabic */ + english_name?: string; + data?: { + /** @example صراع العروش */ + name?: string; + /** @example تتقاتل سبع عائلات نبيلة من أجل السيطرة على أرض - ويستيروس - الأسطورية. الاحتكاك بين العوائل يؤدي إلى حرب واسعة النطاق. في حين يستيقظ الشر القديم في أقصى الشمال. وفي خضم الحرب، نظام عسكري مهمَل - حرس الليل - هم كل ما يقف بين عالم الإنسان والأهوال الجليدية. */ + overview?: string; + /** @example */ + homepage?: string; + /** @example الشتاء قادم */ + tagline?: string; + }; + }[]; + }; + }; + }; + }; + }; + 'tv-series-videos': { + parameters: { + query?: { + /** @description filter the list results by language, supports more than one value by using a comma */ + include_video_language?: string; + language?: string; + }; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1399 + */ + id: number; + results?: { + /** @example en */ + iso_639_1?: string; + /** @example US */ + iso_3166_1?: string; + /** @example Inside Game of Thrones: A Story in Camera Work – BTS (HBO) */ + name?: string; + /** @example y2ZJ3lTaREY */ + key?: string; + /** @example YouTube */ + site?: string; + /** + * @default 0 + * @example 1080 + */ + size: number; + /** @example Behind the Scenes */ + type?: string; + /** + * @default true + * @example true + */ + official: boolean; + /** @example 2019-03-25T14:00:06.000Z */ + published_at?: string; + /** @example 5c999b48c3a36863b73b9d42 */ + id?: string; + }[]; + }; + }; + }; + }; + }; + 'tv-series-watch-providers': { + parameters: { + query?: never; + header?: never; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1399 + */ + id: number; + results?: { + AE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=AE */ + link?: string; + flatrate?: { + /** @example /xEPXbwbfABzPrUTWbgtDFH1NOa.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + }; + AR?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=AR */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + }; + AT?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=AT */ + link?: string; + buy?: { + /** @example /5NyLm42TmCqCMOZFvH4fcoSNKEW.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /y0kyIFElN5sJAsmW8Txj69wzrD2.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 321 + */ + provider_id: number; + /** @example Sky X */ + provider_name?: string; + /** + * @default 0 + * @example 23 + */ + display_priority: number; + }[]; + }; + AU?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=AU */ + link?: string; + flatrate?: { + /** @example /d3ixI1no0EpTj2i7u0Sd2DBXVlG.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 385 + */ + provider_id: number; + /** @example BINGE */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 10 + */ + display_priority: number; + }[]; + }; + BA?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BA */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 28 + */ + display_priority: number; + }[]; + }; + BB?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BB */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 28 + */ + display_priority: number; + }[]; + }; + BE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BE */ + link?: string; + flatrate?: { + /** @example /pq8p1umEnJjdFAP1nFvNArTR61X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 311 + */ + provider_id: number; + /** @example Be TV Go */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + BG?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BG */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 15 + */ + display_priority: number; + }[]; + }; + BO?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BO */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + BR?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BR */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + BS?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BS */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 28 + */ + display_priority: number; + }[]; + }; + CA?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CA */ + link?: string; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /gJ3yVMWouaVj6iHd59TISJ1TlM5.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 230 + */ + provider_id: number; + /** @example Crave */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + CH?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CH */ + link?: string; + flatrate?: { + /** @example /sHP8XLo4Ac4WMbziRyAdRQdb76q.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 210 + */ + provider_id: number; + /** @example Sky */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + buy?: { + /** @example /tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + }; + CI?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CI */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 25 + */ + display_priority: number; + }[]; + }; + CL?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CL */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + CO?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CO */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + }; + CR?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CR */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + CZ?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CZ */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 22 + */ + display_priority: number; + }[]; + }; + DE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=DE */ + link?: string; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /MiVcYLkztM6qqLeVSYWHFCUcXx.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 30 + */ + provider_id: number; + /** @example WOW */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + }; + DK?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=DK */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + DO?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=DO */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 28 + */ + display_priority: number; + }[]; + }; + DZ?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=DZ */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 27 + */ + display_priority: number; + }[]; + }; + EC?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=EC */ + link?: string; + flatrate?: { + /** @example /cDzkhgvozSr4GW2aRdV22uDuFpw.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 339 + */ + provider_id: number; + /** @example Movistar Play */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + EG?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=EG */ + link?: string; + flatrate?: { + /** @example /xEPXbwbfABzPrUTWbgtDFH1NOa.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN */ + provider_name?: string; + /** + * @default 0 + * @example 27 + */ + display_priority: number; + }[]; + }; + ES?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=ES */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + }; + FI?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=FI */ + link?: string; + buy?: { + /** @example /shq88b09gTBYC4hA7K7MUL8Q4zP.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 68 + */ + provider_id: number; + /** @example Microsoft Store */ + provider_name?: string; + /** + * @default 0 + * @example 12 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + FR?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=FR */ + link?: string; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /loOaayvNiLnD0zKl70TO2L5vlAL.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1870 + */ + provider_id: number; + /** @example Pass Warner Amazon Channel */ + provider_name?: string; + /** + * @default 0 + * @example 95 + */ + display_priority: number; + }[]; + }; + GB?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=GB */ + link?: string; + flatrate?: { + /** @example /fBHHXKC34ffxAsQvDe0ZJbvmTEQ.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 29 + */ + provider_id: number; + /** @example Sky Go */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + buy?: { + /** @example /5NyLm42TmCqCMOZFvH4fcoSNKEW.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + GF?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=GF */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 30 + */ + display_priority: number; + }[]; + }; + GH?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=GH */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + }; + GQ?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=GQ */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + }; + GT?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=GT */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + HK?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=HK */ + link?: string; + flatrate?: { + /** @example /bxdNcDbk1ohVeOMmM3eusAAiTLw.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 425 + */ + provider_id: number; + /** @example HBO Go */ + provider_name?: string; + /** + * @default 0 + * @example 40 + */ + display_priority: number; + }[]; + }; + HN?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=HN */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + HR?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=HR */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 34 + */ + display_priority: number; + }[]; + }; + HU?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=HU */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 22 + */ + display_priority: number; + }[]; + }; + ID?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=ID */ + link?: string; + flatrate?: { + /** @example /bxdNcDbk1ohVeOMmM3eusAAiTLw.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 425 + */ + provider_id: number; + /** @example HBO Go */ + provider_name?: string; + /** + * @default 0 + * @example 14 + */ + display_priority: number; + }[]; + }; + IE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=IE */ + link?: string; + flatrate?: { + /** @example /fBHHXKC34ffxAsQvDe0ZJbvmTEQ.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 29 + */ + provider_id: number; + /** @example Sky Go */ + provider_name?: string; + /** + * @default 0 + * @example 8 + */ + display_priority: number; + }[]; + buy?: { + /** @example /2pCbao1J9s0DMak2KKnEzmzHni8.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 130 + */ + provider_id: number; + /** @example Sky Store */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + }; + IL?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=IL */ + link?: string; + flatrate?: { + /** @example /xEPXbwbfABzPrUTWbgtDFH1NOa.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN */ + provider_name?: string; + /** + * @default 0 + * @example 13 + */ + display_priority: number; + }[]; + }; + IQ?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=IQ */ + link?: string; + flatrate?: { + /** @example /xEPXbwbfABzPrUTWbgtDFH1NOa.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN */ + provider_name?: string; + /** + * @default 0 + * @example 12 + */ + display_priority: number; + }[]; + }; + IT?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=IT */ + link?: string; + buy?: { + /** @example /cksgBjTHV3rzAVaO2zUyS1mH4Ke.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 40 + */ + provider_id: number; + /** @example Chili */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /fBHHXKC34ffxAsQvDe0ZJbvmTEQ.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 29 + */ + provider_id: number; + /** @example Sky Go */ + provider_name?: string; + /** + * @default 0 + * @example 8 + */ + display_priority: number; + }[]; + }; + JM?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=JM */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 27 + */ + display_priority: number; + }[]; + }; + JP?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=JP */ + link?: string; + flatrate?: { + /** @example /npg1OiBidQSndMsBZwgEPOYU6Jq.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 84 + */ + provider_id: number; + /** @example U-NEXT */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + buy?: { + /** @example /5NyLm42TmCqCMOZFvH4fcoSNKEW.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + rent?: { + /** @example /5NyLm42TmCqCMOZFvH4fcoSNKEW.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + }; + KE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=KE */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 10 + */ + display_priority: number; + }[]; + }; + KR?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=KR */ + link?: string; + flatrate?: { + /** @example /2ioan5BX5L9tz4fIGU93blTeFhv.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 356 + */ + provider_id: number; + /** @example wavve */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + LB?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=LB */ + link?: string; + flatrate?: { + /** @example /xEPXbwbfABzPrUTWbgtDFH1NOa.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN */ + provider_name?: string; + /** + * @default 0 + * @example 13 + */ + display_priority: number; + }[]; + }; + LT?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=LT */ + link?: string; + flatrate?: { + /** @example /xTVM8uXT9QocigQ07LE7Irc65W2.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 553 + */ + provider_id: number; + /** @example Telia Play */ + provider_name?: string; + /** + * @default 0 + * @example 15 + */ + display_priority: number; + }[]; + }; + LY?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=LY */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 27 + */ + display_priority: number; + }[]; + }; + MD?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=MD */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 26 + */ + display_priority: number; + }[]; + }; + MK?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=MK */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 29 + */ + display_priority: number; + }[]; + }; + MU?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=MU */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 8 + */ + display_priority: number; + }[]; + }; + MX?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=MX */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + }; + MY?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=MY */ + link?: string; + flatrate?: { + /** @example /bxdNcDbk1ohVeOMmM3eusAAiTLw.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 425 + */ + provider_id: number; + /** @example HBO Go */ + provider_name?: string; + /** + * @default 0 + * @example 14 + */ + display_priority: number; + }[]; + }; + MZ?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=MZ */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 10 + */ + display_priority: number; + }[]; + }; + NE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=NE */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 25 + */ + display_priority: number; + }[]; + }; + NG?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=NG */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 27 + */ + display_priority: number; + }[]; + }; + NL?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=NL */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 47 + */ + display_priority: number; + }[]; + buy?: { + /** @example /shq88b09gTBYC4hA7K7MUL8Q4zP.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 68 + */ + provider_id: number; + /** @example Microsoft Store */ + provider_name?: string; + /** + * @default 0 + * @example 12 + */ + display_priority: number; + }[]; + }; + NO?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=NO */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + buy?: { + /** @example /shq88b09gTBYC4hA7K7MUL8Q4zP.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 68 + */ + provider_id: number; + /** @example Microsoft Store */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + }; + NZ?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=NZ */ + link?: string; + flatrate?: { + /** @example /od4YNSSLgOP3p8EtQTnEYfrPa77.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 273 + */ + provider_id: number; + /** @example Neon TV */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + }; + PA?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=PA */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 27 + */ + display_priority: number; + }[]; + }; + PE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=PE */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 8 + */ + display_priority: number; + }[]; + }; + PH?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=PH */ + link?: string; + flatrate?: { + /** @example /bxdNcDbk1ohVeOMmM3eusAAiTLw.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 425 + */ + provider_id: number; + /** @example HBO Go */ + provider_name?: string; + /** + * @default 0 + * @example 12 + */ + display_priority: number; + }[]; + }; + PL?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=PL */ + link?: string; + flatrate?: { + /** @example /l5Wxbsgral716BOtZsGyPVNn8GC.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 250 + */ + provider_id: number; + /** @example Horizon */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + rent?: { + /** @example /bZNXgd8fwVTD68aAGlElkpAtu7b.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 549 + */ + provider_id: number; + /** @example IPLA */ + provider_name?: string; + /** + * @default 0 + * @example 17 + */ + display_priority: number; + }[]; + }; + PS?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=PS */ + link?: string; + flatrate?: { + /** @example /xEPXbwbfABzPrUTWbgtDFH1NOa.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN */ + provider_name?: string; + /** + * @default 0 + * @example 12 + */ + display_priority: number; + }[]; + }; + PT?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=PT */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 28 + */ + display_priority: number; + }[]; + }; + PY?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=PY */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + RO?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=RO */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 17 + */ + display_priority: number; + }[]; + }; + RS?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=RS */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 32 + */ + display_priority: number; + }[]; + }; + RU?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=RU */ + link?: string; + flatrate?: { + /** @example /w1T8s7FqakcfucR8cgOvbe6UeXN.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 115 + */ + provider_id: number; + /** @example Okko */ + provider_name?: string; + /** + * @default 0 + * @example 0 + */ + display_priority: number; + }[]; + ads?: { + /** @example /3jJtMOIwtvcrCyeRMUvv4wsfhJk.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 577 + */ + provider_id: number; + /** @example TvIgle */ + provider_name?: string; + /** + * @default 0 + * @example 22 + */ + display_priority: number; + }[]; + }; + SA?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SA */ + link?: string; + flatrate?: { + /** @example /xEPXbwbfABzPrUTWbgtDFH1NOa.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN */ + provider_name?: string; + /** + * @default 0 + * @example 25 + */ + display_priority: number; + }[]; + }; + SC?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SC */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + }; + SE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SE */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + buy?: { + /** @example /shq88b09gTBYC4hA7K7MUL8Q4zP.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 68 + */ + provider_id: number; + /** @example Microsoft Store */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + SG?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SG */ + link?: string; + flatrate?: { + /** @example /bxdNcDbk1ohVeOMmM3eusAAiTLw.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 425 + */ + provider_id: number; + /** @example HBO Go */ + provider_name?: string; + /** + * @default 0 + * @example 13 + */ + display_priority: number; + }[]; + }; + SI?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SI */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 29 + */ + display_priority: number; + }[]; + }; + SK?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SK */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 37 + */ + display_priority: number; + }[]; + }; + SN?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SN */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + }; + SV?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SV */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 25 + */ + display_priority: number; + }[]; + }; + TH?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=TH */ + link?: string; + flatrate?: { + /** @example /bxdNcDbk1ohVeOMmM3eusAAiTLw.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 425 + */ + provider_id: number; + /** @example HBO Go */ + provider_name?: string; + /** + * @default 0 + * @example 12 + */ + display_priority: number; + }[]; + }; + TR?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=TR */ + link?: string; + flatrate?: { + /** @example /z3XAGCCbDD3KTZFvc96Ytr3XR56.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 341 + */ + provider_id: number; + /** @example blutv */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + }; + TT?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=TT */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + }; + TW?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=TW */ + link?: string; + flatrate?: { + /** @example /bxdNcDbk1ohVeOMmM3eusAAiTLw.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 425 + */ + provider_id: number; + /** @example HBO Go */ + provider_name?: string; + /** + * @default 0 + * @example 40 + */ + display_priority: number; + }[]; + }; + TZ?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=TZ */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + }; + UG?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=UG */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 10 + */ + display_priority: number; + }[]; + }; + US?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=US */ + link?: string; + free?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + buy?: { + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + UY?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=UY */ + link?: string; + flatrate?: { + /** @example /kV8XFGI5OLJKl72dI8DtnKplfFr.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 467 + */ + provider_id: number; + /** @example DIRECTV GO */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + }; + VE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=VE */ + link?: string; + flatrate?: { + /** @example /Ajqyt5aNxNGjmF9uOfxArGrdf3X.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 384 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 8 + */ + display_priority: number; + }[]; + }; + ZA?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=ZA */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + ZM?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=ZM */ + link?: string; + flatrate?: { + /** @example /okiQZMXnqwv0aD3QDYmu5DBNLce.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 10 + */ + display_priority: number; + }[]; + }; + }; + }; + }; + }; + }; + }; + 'tv-series-add-rating': { + parameters: { + query?: { + guest_session_id?: string; + session_id?: string; + }; + header: { + 'Content-Type': string; + }; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/json': { + /** Format: json */ + RAW_BODY: string; + }; + }; + }; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + status_code: number; + /** @example Success. */ + status_message?: string; + }; + }; + }; + }; + }; + 'tv-series-delete-rating': { + parameters: { + query?: { + guest_session_id?: string; + session_id?: string; + }; + header?: { + 'Content-Type'?: string; + }; + path: { + series_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 13 + */ + status_code: number; + /** @example The item/record was deleted successfully. */ + status_message?: string; + }; + }; + }; + }; + }; + 'tv-season-details': { + parameters: { + query?: { + /** @description comma separated list of endpoints within this namespace, 20 items max */ + append_to_response?: string; + language?: string; + }; + header?: never; + path: { + series_id: number; + season_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** @example 5256c89f19c2956ff6046d47 */ + _id?: string; + /** @example 2011-04-17 */ + air_date?: string; + episodes?: { + /** @example 2011-04-17 */ + air_date?: string; + /** + * @default 0 + * @example 1 + */ + episode_number: number; + /** @example standard */ + episode_type?: string; + /** + * @default 0 + * @example 63056 + */ + id: number; + /** @example Winter Is Coming */ + name?: string; + /** @example Jon Arryn, the Hand of the King, is dead. King Robert Baratheon plans to ask his oldest friend, Eddard Stark, to take Jon's place. Across the sea, Viserys Targaryen plans to wed his sister to a nomadic warlord in exchange for an army. */ + overview?: string; + /** @example 101 */ + production_code?: string; + /** + * @default 0 + * @example 62 + */ + runtime: number; + /** + * @default 0 + * @example 1 + */ + season_number: number; + /** + * @default 0 + * @example 1399 + */ + show_id: number; + /** @example /9hGF3WUkBf7cSjMg0cdMDHJkByd.jpg */ + still_path?: string; + /** + * @default 0 + * @example 8.1 + */ + vote_average: number; + /** + * @default 0 + * @example 396 + */ + vote_count: number; + crew?: { + /** @example Directing */ + department?: string; + /** @example Director */ + job?: string; + /** @example 5256c8a219c2956ff6046e77 */ + credit_id?: string; + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** + * @default 0 + * @example 44797 + */ + id: number; + /** @example Directing */ + known_for_department?: string; + /** @example Tim Van Patten */ + name?: string; + /** @example Tim Van Patten */ + original_name?: string; + /** + * @default 0 + * @example 0.8004 + */ + popularity: number; + /** @example /vwcARZBg4PEzOwnPsXdjRWeUVrZ.jpg */ + profile_path?: string; + }[]; + guest_stars?: { + /** @example Benjen Stark */ + character?: string; + /** @example 5256c8b919c2956ff604836a */ + credit_id?: string; + /** + * @default 0 + * @example 61 + */ + order: number; + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** + * @default 0 + * @example 119783 + */ + id: number; + /** @example Acting */ + known_for_department?: string; + /** @example Joseph Mawle */ + name?: string; + /** @example Joseph Mawle */ + original_name?: string; + /** + * @default 0 + * @example 0.8932 + */ + popularity: number; + /** @example /1Ocb9v3h54beGVoJMm4w50UQhLf.jpg */ + profile_path?: string; + }[]; + }[]; + /** @example Season 1 */ + name?: string; + networks?: { + /** + * @default 0 + * @example 49 + */ + id: number; + /** @example /tuomPhY2UtuPTqqFnKMVHvSb724.png */ + logo_path?: string; + /** @example HBO */ + name?: string; + /** @example US */ + origin_country?: string; + }[]; + /** @example Trouble is brewing in the Seven Kingdoms of Westeros. For the driven inhabitants of this visionary world, control of Westeros' Iron Throne holds the lure of great power. But in a land where the seasons can last a lifetime, winter is coming...and beyond the Great Wall that protects them, an ancient evil has returned. In Season One, the story centers on three primary areas: the Stark and the Lannister families, whose designs on controlling the throne threaten a tenuous peace; the dragon princess Daenerys, heir to the former dynasty, who waits just over the Narrow Sea with her malevolent brother Viserys; and the Great Wall--a massive barrier of ice where a forgotten danger is stirring. */ + overview?: string; + /** + * @default 0 + * @example 3624 + */ + id: number; + /** @example /wgfKiqzuMrFIkU1M68DDDY8kGC1.jpg */ + poster_path?: string; + /** + * @default 0 + * @example 1 + */ + season_number: number; + /** + * @default 0 + * @example 8.4 + */ + vote_average: number; + }; + }; + }; + }; + }; + 'tv-season-account-states': { + parameters: { + query?: { + session_id?: string; + guest_session_id?: string; + }; + header?: never; + path: { + series_id: number; + season_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 3624 + */ + id: number; + results?: { + /** + * @default 0 + * @example 63056 + */ + id: number; + /** + * @default 0 + * @example 1 + */ + episode_number: number; + rated?: { + /** + * @default 0 + * @example 9 + */ + value: number; + }; + }[]; + }; + }; + }; + }; + }; + 'tv-season-aggregate-credits': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path: { + series_id: number; + season_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + cast?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** + * @default 0 + * @example 22970 + */ + id: number; + /** @example Acting */ + known_for_department?: string; + /** @example Peter Dinklage */ + name?: string; + /** @example Peter Dinklage */ + original_name?: string; + /** + * @default 0 + * @example 30.6 + */ + popularity: number; + /** @example /lRsRgnksAhBRXwAB68MFjmTtLrk.jpg */ + profile_path?: string; + roles?: { + /** @example 5256c8b219c2956ff6047cd8 */ + credit_id?: string; + /** @example Tyrion Lannister */ + character?: string; + /** + * @default 0 + * @example 10 + */ + episode_count: number; + }[]; + /** + * @default 0 + * @example 10 + */ + total_episode_count: number; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + crew?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 1 + */ + gender: number; + /** + * @default 0 + * @example 9153 + */ + id: number; + /** @example Art */ + known_for_department?: string; + /** @example Gemma Jackson */ + name?: string; + /** @example Gemma Jackson */ + original_name?: string; + /** + * @default 0 + * @example 0.995 + */ + popularity: number; + profile_path?: unknown; + jobs?: { + /** @example 54eee8b8c3a3686d5e005430 */ + credit_id?: string; + /** @example Production Design */ + job?: string; + /** + * @default 0 + * @example 10 + */ + episode_count: number; + }[]; + /** @example Art */ + department?: string; + /** + * @default 0 + * @example 10 + */ + total_episode_count: number; + }[]; + /** + * @default 0 + * @example 3624 + */ + id: number; + }; + }; + }; + }; + }; + 'tv-season-changes-by-id': { + parameters: { + query?: { + end_date?: string; + page?: number; + start_date?: string; + }; + header?: never; + path: { + season_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + changes?: { + /** @example episode */ + key?: string; + items?: { + /** @example 5717c8c69251414cfd00250f */ + id?: string; + /** @example updated */ + action?: string; + /** @example 2016-04-20 18:21:58 UTC */ + time?: string; + value?: { + /** + * @default 0 + * @example 63056 + */ + episode_id: number; + /** + * @default 0 + * @example 1 + */ + episode_number: number; + }; + }[]; + }[]; + }; + }; + }; + }; + }; + 'tv-season-credits': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path: { + series_id: number; + season_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + cast?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** + * @default 0 + * @example 22970 + */ + id: number; + /** @example Acting */ + known_for_department?: string; + /** @example Peter Dinklage */ + name?: string; + /** @example Peter Dinklage */ + original_name?: string; + /** + * @default 0 + * @example 30.6 + */ + popularity: number; + /** @example /lRsRgnksAhBRXwAB68MFjmTtLrk.jpg */ + profile_path?: string; + /** @example Tyrion Lannister */ + character?: string; + /** @example 5256c8b219c2956ff6047cd8 */ + credit_id?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + crew?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 0 + */ + gender: number; + /** + * @default 0 + * @example 1223796 + */ + id: number; + /** @example Production */ + known_for_department?: string; + /** @example Frank Doelger */ + name?: string; + /** @example Frank Doelger */ + original_name?: string; + /** + * @default 0 + * @example 0.694 + */ + popularity: number; + profile_path?: unknown; + /** @example 5256c8c419c2956ff604867c */ + credit_id?: string; + /** @example Production */ + department?: string; + /** @example Producer */ + job?: string; + }[]; + /** + * @default 0 + * @example 3624 + */ + id: number; + }; + }; + }; + }; + }; + 'tv-season-external-ids': { + parameters: { + query?: never; + header?: never; + path: { + series_id: number; + season_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 3624 + */ + id: number; + /** @example /m/0gmd1gd */ + freebase_mid?: string; + /** @example /m/0gmd1gd */ + freebase_id?: string; + /** + * @default 0 + * @example 364731 + */ + tvdb_id: number; + tvrage_id?: unknown; + /** @example Q1658029 */ + wikidata_id?: string; + }; + }; + }; + }; + }; + 'tv-season-images': { + parameters: { + query?: { + /** @description specify a comma separated list of ISO-639-1 values to query, for example: `en-US,null` */ + include_image_language?: string; + language?: string; + }; + header?: never; + path: { + series_id: number; + season_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 3624 + */ + id: number; + posters?: { + /** + * @default 0 + * @example 0.667 + */ + aspect_ratio: number; + /** + * @default 0 + * @example 1500 + */ + height: number; + /** @example en */ + iso_639_1?: string; + /** @example /wgfKiqzuMrFIkU1M68DDDY8kGC1.jpg */ + file_path?: string; + /** + * @default 0 + * @example 5.514 + */ + vote_average: number; + /** + * @default 0 + * @example 18 + */ + vote_count: number; + /** + * @default 0 + * @example 1000 + */ + width: number; + }[]; + }; + }; + }; + }; + }; + 'tv-season-translations': { + parameters: { + query?: never; + header?: never; + path: { + series_id: number; + season_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 3624 + */ + id: number; + translations?: { + /** @example SA */ + iso_3166_1?: string; + /** @example ar */ + iso_639_1?: string; + /** @example العربية */ + name?: string; + /** @example Arabic */ + english_name?: string; + data?: { + /** @example */ + name?: string; + /** @example سلسلة درامية مبنية على سلسلة روايات لـ جورج آر آر مارتن بعنوان "إيه سونغ أوف آيس أن فاير" والتي حققت مبيعات كبيرة وتتمحور حول الصراعات التي كانت تحدث في العصور الوسطى بين العائلات النبيلة للسيطرة على عرش وستيروس. */ + overview?: string; + }; + }[]; + }; + }; + }; + }; + }; + 'tv-season-videos': { + parameters: { + query?: { + /** @description filter the list results by language, supports more than one value by using a comma */ + include_video_language?: string; + language?: string; + }; + header?: never; + path: { + series_id: number; + season_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 3624 + */ + id: number; + results?: { + /** @example en */ + iso_639_1?: string; + /** @example US */ + iso_3166_1?: string; + /** @example Game Of Thrones - Season 1 Recap - Official HBO UK */ + name?: string; + /** @example e0Y8KpQpW8c */ + key?: string; + /** @example YouTube */ + site?: string; + /** + * @default 0 + * @example 1080 + */ + size: number; + /** @example Recap */ + type?: string; + /** + * @default true + * @example true + */ + official: boolean; + /** @example 2015-05-19T16:31:23.000Z */ + published_at?: string; + /** @example 5ce71a920e0a265ac0cfe497 */ + id?: string; + }[]; + }; + }; + }; + }; + }; + 'tv-season-watch-providers': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path: { + series_id: number; + season_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 3624 + */ + id: number; + results?: { + AD?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=AD */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 24 + */ + display_priority: number; + }[]; + }; + AE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=AE */ + link?: string; + flatrate?: { + /** @example /kC6JTo59Gj6I4vJPyBAYGh0sKAE.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN+ */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + AG?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=AG */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + }; + AR?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=AR */ + link?: string; + flatrate?: { + /** @example /nr5UBW4IGKgBwmhpTMOfcvnX2vX.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 467 + */ + provider_id: number; + /** @example DIRECTV GO */ + provider_name?: string; + /** + * @default 0 + * @example 12 + */ + display_priority: number; + }[]; + }; + AT?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=AT */ + link?: string; + buy?: { + /** @example /seGSXajazLMCKGB5hnRCidtjay1.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /kAZkQcIxMxTmlwdgSB05fqtymp0.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 29 + */ + provider_id: number; + /** @example Sky Go */ + provider_name?: string; + /** + * @default 0 + * @example 8 + */ + display_priority: number; + }[]; + }; + AU?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=AU */ + link?: string; + flatrate?: { + /** @example /fejdSG7TwNQ5E0p6u7A6LVs280R.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 134 + */ + provider_id: number; + /** @example Foxtel Now */ + provider_name?: string; + /** + * @default 0 + * @example 8 + */ + display_priority: number; + }[]; + buy?: { + /** @example /oMYZg3cGAGp9ecKGlBgumcjDmnN.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + }; + BA?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BA */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 27 + */ + display_priority: number; + }[]; + }; + BB?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BB */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 23 + */ + display_priority: number; + }[]; + }; + BE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BE */ + link?: string; + buy?: { + /** @example /seGSXajazLMCKGB5hnRCidtjay1.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 33 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /kwftIxtjuCAROIcdd53UEjzSmca.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1857 + */ + provider_id: number; + /** @example Telenet */ + provider_name?: string; + /** + * @default 0 + * @example 31 + */ + display_priority: number; + }[]; + }; + BG?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BG */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 21 + */ + display_priority: number; + }[]; + }; + BH?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BH */ + link?: string; + flatrate?: { + /** @example /kC6JTo59Gj6I4vJPyBAYGh0sKAE.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN+ */ + provider_name?: string; + /** + * @default 0 + * @example 29 + */ + display_priority: number; + }[]; + }; + BO?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BO */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 30 + */ + display_priority: number; + }[]; + }; + BR?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BR */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + }; + BS?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BS */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 24 + */ + display_priority: number; + }[]; + }; + BZ?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=BZ */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + }; + CA?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CA */ + link?: string; + flatrate?: { + /** @example /ewOptMVIYcOadMGGJz8DJueH2bH.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 230 + */ + provider_id: number; + /** @example Crave */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + buy?: { + /** @example /oMYZg3cGAGp9ecKGlBgumcjDmnN.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + }; + CH?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CH */ + link?: string; + buy?: { + /** @example /8z7rC8uIDaTM91X0ZfkRf04ydj2.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 3 + */ + provider_id: number; + /** @example Google Play Movies */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /ytApMa9fThUQUFTn696AeNBrB8f.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 210 + */ + provider_id: number; + /** @example Sky */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + }; + CI?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CI */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 19 + */ + display_priority: number; + }[]; + }; + CL?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CL */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + CM?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CM */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 0 + */ + display_priority: number; + }[]; + }; + CO?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CO */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + }; + CR?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CR */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + CZ?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=CZ */ + link?: string; + flatrate?: { + /** @example /489t5n9o1KhH7voGNQkrXT7vBKV.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1939 + */ + provider_id: number; + /** @example Lepsi TV */ + provider_name?: string; + /** + * @default 0 + * @example 26 + */ + display_priority: number; + }[]; + }; + DE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=DE */ + link?: string; + flatrate?: { + /** @example /kAZkQcIxMxTmlwdgSB05fqtymp0.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 29 + */ + provider_id: number; + /** @example Sky Go */ + provider_name?: string; + /** + * @default 0 + * @example 8 + */ + display_priority: number; + }[]; + buy?: { + /** @example /oMYZg3cGAGp9ecKGlBgumcjDmnN.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + DK?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=DK */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 39 + */ + display_priority: number; + }[]; + }; + DO?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=DO */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 30 + */ + display_priority: number; + }[]; + }; + EC?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=EC */ + link?: string; + flatrate?: { + /** @example /tRNA2CRgA4XHvd7Mx9dH3sFtDVb.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 339 + */ + provider_id: number; + /** @example MovistarTV */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + EG?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=EG */ + link?: string; + flatrate?: { + /** @example /kC6JTo59Gj6I4vJPyBAYGh0sKAE.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN+ */ + provider_name?: string; + /** + * @default 0 + * @example 20 + */ + display_priority: number; + }[]; + }; + ES?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=ES */ + link?: string; + flatrate?: { + /** @example /f6TRLB3H4jDpFEZ0z2KWSSvu1SB.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 149 + */ + provider_id: number; + /** @example Movistar Plus+ Ficción Total */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + buy?: { + /** @example /seGSXajazLMCKGB5hnRCidtjay1.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 32 + */ + display_priority: number; + }[]; + }; + FI?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=FI */ + link?: string; + flatrate?: { + /** @example /eglAxQEXSO13p6gNf3HKymrIu7y.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 540 + */ + provider_id: number; + /** @example Elisa Viihde */ + provider_name?: string; + /** + * @default 0 + * @example 18 + */ + display_priority: number; + }[]; + buy?: { + /** @example /seGSXajazLMCKGB5hnRCidtjay1.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 54 + */ + display_priority: number; + }[]; + }; + FR?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=FR */ + link?: string; + buy?: { + /** @example /oMYZg3cGAGp9ecKGlBgumcjDmnN.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 78 + */ + display_priority: number; + }[]; + }; + GB?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=GB */ + link?: string; + buy?: { + /** @example /oMYZg3cGAGp9ecKGlBgumcjDmnN.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /g0E9h3JAeIwmdvxlT73jiEuxdNj.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 39 + */ + provider_id: number; + /** @example Now TV */ + provider_name?: string; + /** + * @default 0 + * @example 43 + */ + display_priority: number; + }[]; + }; + GG?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=GG */ + link?: string; + buy?: { + /** @example /seGSXajazLMCKGB5hnRCidtjay1.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 84 + */ + display_priority: number; + }[]; + }; + GQ?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=GQ */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + GT?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=GT */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + GY?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=GY */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + HK?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=HK */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 38 + */ + display_priority: number; + }[]; + }; + HN?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=HN */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 30 + */ + display_priority: number; + }[]; + }; + HR?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=HR */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 33 + */ + display_priority: number; + }[]; + }; + HU?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=HU */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 28 + */ + display_priority: number; + }[]; + }; + ID?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=ID */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 39 + */ + display_priority: number; + }[]; + }; + IE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=IE */ + link?: string; + flatrate?: { + /** @example /g0E9h3JAeIwmdvxlT73jiEuxdNj.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 39 + */ + provider_id: number; + /** @example Now TV */ + provider_name?: string; + /** + * @default 0 + * @example 10 + */ + display_priority: number; + }[]; + buy?: { + /** @example /6AKbY2ayaEuH4zKg2prqoVQ9iaY.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 130 + */ + provider_id: number; + /** @example Sky Store */ + provider_name?: string; + /** + * @default 0 + * @example 9 + */ + display_priority: number; + }[]; + }; + IN?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=IN */ + link?: string; + flatrate?: { + /** @example /kVqjgpcwvDJOhCupjcLzwwtOp52.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 2336 + */ + provider_id: number; + /** @example JioHotstar */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + }; + IQ?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=IQ */ + link?: string; + flatrate?: { + /** @example /kC6JTo59Gj6I4vJPyBAYGh0sKAE.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN+ */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + IT?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=IT */ + link?: string; + buy?: { + /** @example /seGSXajazLMCKGB5hnRCidtjay1.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 33 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /g0E9h3JAeIwmdvxlT73jiEuxdNj.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 39 + */ + provider_id: number; + /** @example Now TV */ + provider_name?: string; + /** + * @default 0 + * @example 10 + */ + display_priority: number; + }[]; + }; + JM?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=JM */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 22 + */ + display_priority: number; + }[]; + }; + JO?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=JO */ + link?: string; + flatrate?: { + /** @example /kC6JTo59Gj6I4vJPyBAYGh0sKAE.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN+ */ + provider_name?: string; + /** + * @default 0 + * @example 31 + */ + display_priority: number; + }[]; + }; + JP?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=JP */ + link?: string; + flatrate?: { + /** @example /a5T7vNaGvoeckYO6rQkHolvyYf4.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 84 + */ + provider_id: number; + /** @example U-NEXT */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + }[]; + buy?: { + /** @example /seGSXajazLMCKGB5hnRCidtjay1.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + rent?: { + /** @example /seGSXajazLMCKGB5hnRCidtjay1.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + }; + KE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=KE */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + LB?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=LB */ + link?: string; + flatrate?: { + /** @example /kC6JTo59Gj6I4vJPyBAYGh0sKAE.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN+ */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + LC?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=LC */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 10 + */ + display_priority: number; + }[]; + }; + MC?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=MC */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 25 + */ + display_priority: number; + }[]; + }; + MD?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=MD */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 25 + */ + display_priority: number; + }[]; + }; + ME?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=ME */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + }; + MG?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=MG */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 0 + */ + display_priority: number; + }[]; + }; + MK?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=MK */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 26 + */ + display_priority: number; + }[]; + }; + ML?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=ML */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 0 + */ + display_priority: number; + }[]; + }; + MU?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=MU */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + }; + MX?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=MX */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 5 + */ + display_priority: number; + }[]; + }; + MY?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=MY */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 31 + */ + display_priority: number; + }[]; + }; + MZ?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=MZ */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + NE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=NE */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 19 + */ + display_priority: number; + }[]; + }; + NG?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=NG */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 21 + */ + display_priority: number; + }[]; + }; + NI?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=NI */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 13 + */ + display_priority: number; + }[]; + }; + NL?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=NL */ + link?: string; + buy?: { + /** @example /seGSXajazLMCKGB5hnRCidtjay1.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 34 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 48 + */ + display_priority: number; + }[]; + }; + NO?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=NO */ + link?: string; + flatrate?: { + /** @example /3ZigBD8WTEPcEHAvMWiJGUsv5u4.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 578 + */ + provider_id: number; + /** @example Strim */ + provider_name?: string; + /** + * @default 0 + * @example 27 + */ + display_priority: number; + }[]; + }; + NZ?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=NZ */ + link?: string; + buy?: { + /** @example /seGSXajazLMCKGB5hnRCidtjay1.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 59 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /iscLKFDwQlr0BAgVDBcuRapLiwC.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 273 + */ + provider_id: number; + /** @example Neon TV */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + OM?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=OM */ + link?: string; + flatrate?: { + /** @example /kC6JTo59Gj6I4vJPyBAYGh0sKAE.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN+ */ + provider_name?: string; + /** + * @default 0 + * @example 31 + */ + display_priority: number; + }[]; + }; + PA?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=PA */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 30 + */ + display_priority: number; + }[]; + }; + PE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=PE */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + PH?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=PH */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 32 + */ + display_priority: number; + }[]; + }; + PL?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=PL */ + link?: string; + flatrate?: { + /** @example /jhMNVBV2UocEGepRkr9oFPD7Gpb.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 505 + */ + provider_id: number; + /** @example Player */ + provider_name?: string; + /** + * @default 0 + * @example 10 + */ + display_priority: number; + }[]; + buy?: { + /** @example /seGSXajazLMCKGB5hnRCidtjay1.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 27 + */ + display_priority: number; + }[]; + }; + PT?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=PT */ + link?: string; + buy?: { + /** @example /seGSXajazLMCKGB5hnRCidtjay1.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 43 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 32 + */ + display_priority: number; + }[]; + }; + PY?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=PY */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 29 + */ + display_priority: number; + }[]; + }; + QA?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=QA */ + link?: string; + flatrate?: { + /** @example /kC6JTo59Gj6I4vJPyBAYGh0sKAE.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN+ */ + provider_name?: string; + /** + * @default 0 + * @example 31 + */ + display_priority: number; + }[]; + }; + RO?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=RO */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 23 + */ + display_priority: number; + }[]; + }; + RS?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=RS */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 28 + */ + display_priority: number; + }[]; + }; + RU?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=RU */ + link?: string; + flatrate?: { + /** @example /5z8dpQN27kybhn21EVLZcJPpMEo.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 115 + */ + provider_id: number; + /** @example Okko */ + provider_name?: string; + /** + * @default 0 + * @example 0 + */ + display_priority: number; + }[]; + }; + SA?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SA */ + link?: string; + flatrate?: { + /** @example /kC6JTo59Gj6I4vJPyBAYGh0sKAE.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 629 + */ + provider_id: number; + /** @example OSN+ */ + provider_name?: string; + /** + * @default 0 + * @example 20 + */ + display_priority: number; + }[]; + }; + SC?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SC */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + }; + SE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SE */ + link?: string; + buy?: { + /** @example /seGSXajazLMCKGB5hnRCidtjay1.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 39 + */ + display_priority: number; + }[]; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 44 + */ + display_priority: number; + }[]; + }; + SG?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SG */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 31 + */ + display_priority: number; + }[]; + }; + SI?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SI */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 28 + */ + display_priority: number; + }[]; + }; + SK?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SK */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 37 + */ + display_priority: number; + }[]; + }; + SN?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SN */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + SV?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=SV */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 30 + */ + display_priority: number; + }[]; + }; + TC?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=TC */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 10 + */ + display_priority: number; + }[]; + }; + TD?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=TD */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 0 + */ + display_priority: number; + }[]; + }; + TH?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=TH */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 30 + */ + display_priority: number; + }[]; + }; + TR?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=TR */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 29 + */ + display_priority: number; + }[]; + }; + TT?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=TT */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + }; + TW?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=TW */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 38 + */ + display_priority: number; + }[]; + }; + US?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=US */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 11 + */ + display_priority: number; + }[]; + buy?: { + /** @example /seGSXajazLMCKGB5hnRCidtjay1.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 10 + */ + provider_id: number; + /** @example Amazon Video */ + provider_name?: string; + /** + * @default 0 + * @example 6 + */ + display_priority: number; + }[]; + }; + UY?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=UY */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 3 + */ + display_priority: number; + }[]; + }; + VE?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=VE */ + link?: string; + flatrate?: { + /** @example /jbe4gVSfRlbPTdESXhEKpornsfu.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 1899 + */ + provider_id: number; + /** @example HBO Max */ + provider_name?: string; + /** + * @default 0 + * @example 27 + */ + display_priority: number; + }[]; + }; + ZA?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=ZA */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 4 + */ + display_priority: number; + }[]; + }; + ZM?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=ZM */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 7 + */ + display_priority: number; + }[]; + }; + ZW?: { + /** @example https://www.themoviedb.org/tv/1399-game-of-thrones/watch?locale=ZW */ + link?: string; + flatrate?: { + /** @example /ilR8XFZOr3e3wETQ4ZXLjXQXrts.jpg */ + logo_path?: string; + /** + * @default 0 + * @example 55 + */ + provider_id: number; + /** @example ShowMax */ + provider_name?: string; + /** + * @default 0 + * @example 0 + */ + display_priority: number; + }[]; + }; + }; + }; + }; + }; + }; + }; + 'tv-episode-details': { + parameters: { + query?: { + /** @description comma separated list of endpoints within this namespace, 20 items max */ + append_to_response?: string; + language?: string; + }; + header?: never; + path: { + series_id: number; + season_number: number; + episode_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** @example 2011-04-17 */ + air_date?: string; + crew?: { + /** @example Directing */ + department?: string; + /** @example Director */ + job?: string; + /** @example 5256c8a219c2956ff6046e77 */ + credit_id?: string; + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** + * @default 0 + * @example 44797 + */ + id: number; + /** @example Directing */ + known_for_department?: string; + /** @example Timothy Van Patten */ + name?: string; + /** @example Timothy Van Patten */ + original_name?: string; + /** + * @default 0 + * @example 7.775 + */ + popularity: number; + /** @example /MzSOFrd99HRdr6pkSRSctk3kBR.jpg */ + profile_path?: string; + }[]; + /** + * @default 0 + * @example 1 + */ + episode_number: number; + guest_stars?: { + /** @example Benjen Stark */ + character?: string; + /** @example 5256c8b919c2956ff604836a */ + credit_id?: string; + /** + * @default 0 + * @example 62 + */ + order: number; + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** + * @default 0 + * @example 119783 + */ + id: number; + /** @example Acting */ + known_for_department?: string; + /** @example Joseph Mawle */ + name?: string; + /** @example Joseph Mawle */ + original_name?: string; + /** + * @default 0 + * @example 6.758 + */ + popularity: number; + /** @example /1Ocb9v3h54beGVoJMm4w50UQhLf.jpg */ + profile_path?: string; + }[]; + /** @example Winter Is Coming */ + name?: string; + /** @example Jon Arryn, the Hand of the King, is dead. King Robert Baratheon plans to ask his oldest friend, Eddard Stark, to take Jon's place. Across the sea, Viserys Targaryen plans to wed his sister to a nomadic warlord in exchange for an army. */ + overview?: string; + /** + * @default 0 + * @example 63056 + */ + id: number; + /** @example 101 */ + production_code?: string; + /** + * @default 0 + * @example 62 + */ + runtime: number; + /** + * @default 0 + * @example 1 + */ + season_number: number; + /** @example /9hGF3WUkBf7cSjMg0cdMDHJkByd.jpg */ + still_path?: string; + /** + * @default 0 + * @example 7.8 + */ + vote_average: number; + /** + * @default 0 + * @example 286 + */ + vote_count: number; + }; + }; + }; + }; + }; + 'tv-episode-account-states': { + parameters: { + query?: { + session_id?: string; + guest_session_id?: string; + }; + header?: never; + path: { + series_id: number; + season_number: number; + episode_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 550 + */ + id: number; + /** + * @default true + * @example true + */ + favorite: boolean; + rated?: { + /** + * @default 0 + * @example 9 + */ + value: number; + }; + /** + * @default true + * @example false + */ + watchlist: boolean; + }; + }; + }; + }; + }; + 'tv-episode-changes-by-id': { + parameters: { + query?: never; + header?: never; + path: { + episode_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + changes?: { + /** @example production_code */ + key?: string; + items?: { + /** @example 54bd9ed7c3a3686c6b00da66 */ + id?: string; + /** @example added */ + action?: string; + /** @example 2015-01-20 00:18:31 UTC */ + time?: string; + /** @example 101 */ + value?: string; + }[]; + }[]; + }; + }; + }; + }; + }; + 'tv-episode-credits': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path: { + series_id: number; + season_number: number; + episode_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + cast?: { + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** + * @default 0 + * @example 22970 + */ + id: number; + /** @example Acting */ + known_for_department?: string; + /** @example Peter Dinklage */ + name?: string; + /** @example Peter Dinklage */ + original_name?: string; + /** + * @default 0 + * @example 30.6 + */ + popularity: number; + /** @example /lRsRgnksAhBRXwAB68MFjmTtLrk.jpg */ + profile_path?: string; + /** @example Tyrion Lannister */ + character?: string; + /** @example 5256c8b219c2956ff6047cd8 */ + credit_id?: string; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + crew?: { + /** @example Directing */ + department?: string; + /** @example Director */ + job?: string; + /** @example 5256c8a219c2956ff6046e77 */ + credit_id?: string; + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** + * @default 0 + * @example 44797 + */ + id: number; + /** @example Directing */ + known_for_department?: string; + /** @example Timothy Van Patten */ + name?: string; + /** @example Timothy Van Patten */ + original_name?: string; + /** + * @default 0 + * @example 8.292 + */ + popularity: number; + /** @example /MzSOFrd99HRdr6pkSRSctk3kBR.jpg */ + profile_path?: string; + }[]; + guest_stars?: { + /** @example Benjen Stark */ + character?: string; + /** @example 5256c8b919c2956ff604836a */ + credit_id?: string; + /** + * @default 0 + * @example 62 + */ + order: number; + /** + * @default true + * @example false + */ + adult: boolean; + /** + * @default 0 + * @example 2 + */ + gender: number; + /** + * @default 0 + * @example 119783 + */ + id: number; + /** @example Acting */ + known_for_department?: string; + /** @example Joseph Mawle */ + name?: string; + /** @example Joseph Mawle */ + original_name?: string; + /** + * @default 0 + * @example 8.559 + */ + popularity: number; + /** @example /1Ocb9v3h54beGVoJMm4w50UQhLf.jpg */ + profile_path?: string; + }[]; + /** + * @default 0 + * @example 63056 + */ + id: number; + }; + }; + }; + }; + }; + 'tv-episode-external-ids': { + parameters: { + query?: never; + header?: never; + path: { + series_id: number; + season_number: number; + episode_number: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 63056 + */ + id: number; + /** @example tt1480055 */ + imdb_id?: string; + /** @example /m/0gmc6ph */ + freebase_mid?: string; + /** @example /en/winter_is_coming */ + freebase_id?: string; + /** + * @default 0 + * @example 3254641 + */ + tvdb_id: number; + /** + * @default 0 + * @example 1065008299 + */ + tvrage_id: number; + /** @example Q2614622 */ + wikidata_id?: string; + }; + }; + }; + }; + }; + 'tv-episode-images': { + parameters: { + query?: { + /** @description specify a comma separated list of ISO-639-1 values to query, for example: `en-US,null` */ + include_image_language?: string; + language?: string; + }; + header?: never; + path: { + series_id: number; + season_number: number; + episode_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 63056 + */ + id: number; + stills?: { + /** + * @default 0 + * @example 1.778 + */ + aspect_ratio: number; + /** + * @default 0 + * @example 1080 + */ + height: number; + iso_639_1?: unknown; + /** @example /9hGF3WUkBf7cSjMg0cdMDHJkByd.jpg */ + file_path?: string; + /** + * @default 0 + * @example 5.454 + */ + vote_average: number; + /** + * @default 0 + * @example 3 + */ + vote_count: number; + /** + * @default 0 + * @example 1920 + */ + width: number; + }[]; + }; + }; + }; + }; + }; + 'tv-episode-translations': { + parameters: { + query?: never; + header?: never; + path: { + series_id: number; + season_number: number; + episode_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 63056 + */ + id: number; + translations?: { + /** @example SA */ + iso_3166_1?: string; + /** @example ar */ + iso_639_1?: string; + /** @example العربية */ + name?: string; + /** @example Arabic */ + english_name?: string; + data?: { + /** @example */ + name?: string; + /** @example خلف باب واسع من الجليد في شمالي وستيروس هناك شيء يحدث. تتلقى عائلة ستارك التي من وينترفيل زيارة من العائلة المالكة، بينما يشكل أمير عائلة تارغارين المنفي تحالفاً جديداً للسيطرة على العرش من جديد. */ + overview?: string; + }; + }[]; + }; + }; + }; + }; + }; + 'tv-episode-videos': { + parameters: { + query?: { + /** @description filter the list results by language, supports more than one value by using a comma */ + include_video_language?: string; + language?: string; + }; + header?: never; + path: { + series_id: number; + season_number: number; + episode_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 3624 + */ + id: number; + results?: { + /** @example en */ + iso_639_1?: string; + /** @example US */ + iso_3166_1?: string; + /** @example Game Of Thrones - Season 1 Recap - Official HBO UK */ + name?: string; + /** @example e0Y8KpQpW8c */ + key?: string; + /** @example YouTube */ + site?: string; + /** + * @default 0 + * @example 1080 + */ + size: number; + /** @example Recap */ + type?: string; + /** + * @default true + * @example true + */ + official: boolean; + /** @example 2015-05-19T16:31:23.000Z */ + published_at?: string; + /** @example 5ce71a920e0a265ac0cfe497 */ + id?: string; + }[]; + }; + }; + }; + }; + }; + 'tv-episode-add-rating': { + parameters: { + query?: { + guest_session_id?: string; + session_id?: string; + }; + header: { + 'Content-Type': string; + }; + path: { + series_id: number; + season_number: number; + episode_number: number; + }; + cookie?: never; + }; + requestBody?: { + content: { + 'application/json': { + /** Format: json */ + RAW_BODY: string; + }; + }; + }; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 1 + */ + status_code: number; + /** @example Success. */ + status_message?: string; + }; + }; + }; + }; + }; + 'tv-episode-delete-rating': { + parameters: { + query?: { + guest_session_id?: string; + session_id?: string; + }; + header?: { + 'Content-Type'?: string; + }; + path: { + series_id: number; + season_number: number; + episode_number: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** + * @default 0 + * @example 13 + */ + status_code: number; + /** @example The item/record was deleted successfully. */ + status_message?: string; + }; + }; + }; + }; + }; + 'tv-episode-group-details': { + parameters: { + query?: never; + header?: never; + path: { + tv_episode_group_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + /** @example Comedians in Cars organized in Netflix's collections. */ + description?: string; + /** + * @default 0 + * @example 83 + */ + episode_count: number; + /** + * @default 0 + * @example 6 + */ + group_count: number; + groups?: { + /** @example 5acf93efc3a368739a0000a9 */ + id?: string; + /** @example First Cup */ + name?: string; + /** + * @default 0 + * @example 1 + */ + order: number; + episodes?: { + /** @example 2015-06-17 */ + air_date?: string; + /** + * @default 0 + * @example 3 + */ + episode_number: number; + /** + * @default 0 + * @example 1078262 + */ + id: number; + /** @example Jim Carrey: We Love Breathing What You're Burning, Baby */ + name?: string; + /** @example Jerry’s full of testosterone as he steps into a ‘76 Lamborghini Countach with Jim Carrey, who’s between a three-week cleanse and a five-day silent retreat. After coffee, it’s off to Carrey’s studio to study a portrait of a gorilla with a machine gun. Wow. */ + overview?: string; + /** @example */ + production_code?: string; + runtime?: unknown; + /** + * @default 0 + * @example 6 + */ + season_number: number; + /** + * @default 0 + * @example 59717 + */ + show_id: number; + /** @example /aOyE420zuFq9zWtEWjIccAiTrzU.jpg */ + still_path?: string; + /** + * @default 0 + * @example 7.4 + */ + vote_average: number; + /** + * @default 0 + * @example 5 + */ + vote_count: number; + /** + * @default 0 + * @example 0 + */ + order: number; + }[]; + /** + * @default true + * @example true + */ + locked: boolean; + }[]; + /** @example 5acf93e60e0a26346d0000ce */ + id?: string; + /** @example Netflix Collections */ + name?: string; + network?: { + /** + * @default 0 + * @example 213 + */ + id: number; + /** @example /wwemzKWzjKYJFfCeiB57q3r4Bcm.png */ + logo_path?: string; + /** @example Netflix */ + name?: string; + /** @example */ + origin_country?: string; + }; + /** + * @default 0 + * @example 4 + */ + type: number; + }; + }; + }; + }; + }; + 'watch-providers-available-regions': { + parameters: { + query?: { + language?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + results?: { + /** @example AD */ + iso_3166_1?: string; + /** @example Andorra */ + english_name?: string; + /** @example Andorra */ + native_name?: string; + }[]; + }; + }; + }; + }; + }; + 'watch-providers-movie-list': { + parameters: { + query?: { + language?: string; + watch_region?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + results?: { + display_priorities?: { + /** + * @default 0 + * @example 6 + */ + CA: number; + /** + * @default 0 + * @example 1 + */ + AE: number; + /** + * @default 0 + * @example 3 + */ + AR: number; + /** + * @default 0 + * @example 4 + */ + AT: number; + /** + * @default 0 + * @example 10 + */ + AU: number; + /** + * @default 0 + * @example 6 + */ + BE: number; + /** + * @default 0 + * @example 6 + */ + BO: number; + /** + * @default 0 + * @example 8 + */ + BR: number; + /** + * @default 0 + * @example 2 + */ + BG: number; + /** + * @default 0 + * @example 4 + */ + CH: number; + /** + * @default 0 + * @example 3 + */ + CL: number; + /** + * @default 0 + * @example 4 + */ + CO: number; + /** + * @default 0 + * @example 5 + */ + CR: number; + /** + * @default 0 + * @example 3 + */ + CZ: number; + /** + * @default 0 + * @example 4 + */ + DE: number; + /** + * @default 0 + * @example 7 + */ + DK: number; + /** + * @default 0 + * @example 7 + */ + EC: number; + /** + * @default 0 + * @example 3 + */ + EE: number; + /** + * @default 0 + * @example 2 + */ + EG: number; + /** + * @default 0 + * @example 4 + */ + ES: number; + /** + * @default 0 + * @example 10 + */ + FI: number; + /** + * @default 0 + * @example 5 + */ + FR: number; + /** + * @default 0 + * @example 5 + */ + GB: number; + /** + * @default 0 + * @example 2 + */ + GR: number; + /** + * @default 0 + * @example 7 + */ + GT: number; + /** + * @default 0 + * @example 5 + */ + HK: number; + /** + * @default 0 + * @example 7 + */ + HN: number; + /** + * @default 0 + * @example 3 + */ + HU: number; + /** + * @default 0 + * @example 4 + */ + ID: number; + /** + * @default 0 + * @example 4 + */ + IE: number; + /** + * @default 0 + * @example 8 + */ + IN: number; + /** + * @default 0 + * @example 4 + */ + IT: number; + /** + * @default 0 + * @example 7 + */ + JP: number; + /** + * @default 0 + * @example 3 + */ + LT: number; + /** + * @default 0 + * @example 3 + */ + LV: number; + /** + * @default 0 + * @example 4 + */ + MX: number; + /** + * @default 0 + * @example 4 + */ + MY: number; + /** + * @default 0 + * @example 8 + */ + NL: number; + /** + * @default 0 + * @example 6 + */ + NO: number; + /** + * @default 0 + * @example 4 + */ + NZ: number; + /** + * @default 0 + * @example 3 + */ + PE: number; + /** + * @default 0 + * @example 4 + */ + PH: number; + /** + * @default 0 + * @example 1 + */ + PL: number; + /** + * @default 0 + * @example 4 + */ + PT: number; + /** + * @default 0 + * @example 7 + */ + PY: number; + /** + * @default 0 + * @example 2 + */ + RU: number; + /** + * @default 0 + * @example 1 + */ + SA: number; + /** + * @default 0 + * @example 8 + */ + SE: number; + /** + * @default 0 + * @example 5 + */ + SG: number; + /** + * @default 0 + * @example 3 + */ + SK: number; + /** + * @default 0 + * @example 4 + */ + TH: number; + /** + * @default 0 + * @example 6 + */ + TR: number; + /** + * @default 0 + * @example 7 + */ + TW: number; + /** + * @default 0 + * @example 4 + */ + US: number; + /** + * @default 0 + * @example 4 + */ + VE: number; + /** + * @default 0 + * @example 2 + */ + ZA: number; + /** + * @default 0 + * @example 31 + */ + SI: number; + /** + * @default 0 + * @example 13 + */ + CV: number; + /** + * @default 0 + * @example 17 + */ + GH: number; + /** + * @default 0 + * @example 15 + */ + MU: number; + /** + * @default 0 + * @example 16 + */ + MZ: number; + /** + * @default 0 + * @example 16 + */ + UG: number; + /** + * @default 0 + * @example 28 + */ + IL: number; + }; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + }[]; + }; + }; + }; + }; + }; + 'watch-provider-tv-list': { + parameters: { + query?: { + language?: string; + watch_region?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description 200 */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + results?: { + display_priorities?: { + /** + * @default 0 + * @example 6 + */ + CA: number; + /** + * @default 0 + * @example 1 + */ + AE: number; + /** + * @default 0 + * @example 3 + */ + AR: number; + /** + * @default 0 + * @example 4 + */ + AT: number; + /** + * @default 0 + * @example 10 + */ + AU: number; + /** + * @default 0 + * @example 6 + */ + BE: number; + /** + * @default 0 + * @example 6 + */ + BO: number; + /** + * @default 0 + * @example 8 + */ + BR: number; + /** + * @default 0 + * @example 2 + */ + BG: number; + /** + * @default 0 + * @example 4 + */ + CH: number; + /** + * @default 0 + * @example 3 + */ + CL: number; + /** + * @default 0 + * @example 4 + */ + CO: number; + /** + * @default 0 + * @example 5 + */ + CR: number; + /** + * @default 0 + * @example 3 + */ + CZ: number; + /** + * @default 0 + * @example 4 + */ + DE: number; + /** + * @default 0 + * @example 7 + */ + DK: number; + /** + * @default 0 + * @example 7 + */ + EC: number; + /** + * @default 0 + * @example 3 + */ + EE: number; + /** + * @default 0 + * @example 2 + */ + EG: number; + /** + * @default 0 + * @example 4 + */ + ES: number; + /** + * @default 0 + * @example 10 + */ + FI: number; + /** + * @default 0 + * @example 5 + */ + FR: number; + /** + * @default 0 + * @example 5 + */ + GB: number; + /** + * @default 0 + * @example 2 + */ + GR: number; + /** + * @default 0 + * @example 7 + */ + GT: number; + /** + * @default 0 + * @example 5 + */ + HK: number; + /** + * @default 0 + * @example 7 + */ + HN: number; + /** + * @default 0 + * @example 3 + */ + HU: number; + /** + * @default 0 + * @example 4 + */ + ID: number; + /** + * @default 0 + * @example 4 + */ + IE: number; + /** + * @default 0 + * @example 8 + */ + IN: number; + /** + * @default 0 + * @example 4 + */ + IT: number; + /** + * @default 0 + * @example 7 + */ + JP: number; + /** + * @default 0 + * @example 3 + */ + LT: number; + /** + * @default 0 + * @example 3 + */ + LV: number; + /** + * @default 0 + * @example 4 + */ + MX: number; + /** + * @default 0 + * @example 4 + */ + MY: number; + /** + * @default 0 + * @example 8 + */ + NL: number; + /** + * @default 0 + * @example 6 + */ + NO: number; + /** + * @default 0 + * @example 4 + */ + NZ: number; + /** + * @default 0 + * @example 3 + */ + PE: number; + /** + * @default 0 + * @example 4 + */ + PH: number; + /** + * @default 0 + * @example 1 + */ + PL: number; + /** + * @default 0 + * @example 4 + */ + PT: number; + /** + * @default 0 + * @example 7 + */ + PY: number; + /** + * @default 0 + * @example 2 + */ + RU: number; + /** + * @default 0 + * @example 1 + */ + SA: number; + /** + * @default 0 + * @example 8 + */ + SE: number; + /** + * @default 0 + * @example 5 + */ + SG: number; + /** + * @default 0 + * @example 3 + */ + SK: number; + /** + * @default 0 + * @example 4 + */ + TH: number; + /** + * @default 0 + * @example 6 + */ + TR: number; + /** + * @default 0 + * @example 7 + */ + TW: number; + /** + * @default 0 + * @example 4 + */ + US: number; + /** + * @default 0 + * @example 4 + */ + VE: number; + /** + * @default 0 + * @example 2 + */ + ZA: number; + /** + * @default 0 + * @example 31 + */ + SI: number; + /** + * @default 0 + * @example 13 + */ + CV: number; + /** + * @default 0 + * @example 17 + */ + GH: number; + /** + * @default 0 + * @example 15 + */ + MU: number; + /** + * @default 0 + * @example 16 + */ + MZ: number; + /** + * @default 0 + * @example 16 + */ + UG: number; + /** + * @default 0 + * @example 28 + */ + IL: number; + }; + /** + * @default 0 + * @example 2 + */ + display_priority: number; + /** @example /peURlLlr8jggOwK53fJ5wdQl05y.jpg */ + logo_path?: string; + /** @example Apple TV */ + provider_name?: string; + /** + * @default 0 + * @example 2 + */ + provider_id: number; + }[]; + }; + }; + }; + }; + }; +} From 59919f94613e83385f39d664f3b55f4fea114a18 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Wed, 14 Jan 2026 20:15:28 +0100 Subject: [PATCH 13/14] Improved clarity for users when choosing seasons The last modal now says "create entry" instead of "Ok" --- src/modals/MediaDbSearchResultModal.ts | 9 ++++----- src/modals/MediaDbSeasonSelectModal.ts | 3 ++- src/modals/SelectModal.ts | 6 ++++-- src/utils/ModalHelper.ts | 7 +++++++ 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/modals/MediaDbSearchResultModal.ts b/src/modals/MediaDbSearchResultModal.ts index b33d886..a4cd146 100644 --- a/src/modals/MediaDbSearchResultModal.ts +++ b/src/modals/MediaDbSearchResultModal.ts @@ -1,7 +1,7 @@ import type MediaDbPlugin from '../main'; import type { MediaTypeModel } from '../models/MediaTypeModel'; import type { SelectModalData, SelectModalOptions } from '../utils/ModalHelper'; -import { SELECT_MODAL_OPTIONS_DEFAULT } from '../utils/ModalHelper'; +import { SELECTMODALOPTIONSDEFAULT } from '../utils/ModalHelper'; import { SelectModal } from './SelectModal'; export class MediaDbSearchResultModal extends SelectModal { @@ -13,18 +13,17 @@ export class MediaDbSearchResultModal extends SelectModal { submitCallback?: (res: SelectModalData) => void; closeCallback?: (err?: Error) => void; skipCallback?: () => void; + submitButtonText: string; constructor(plugin: MediaDbPlugin, selectModalOptions: SelectModalOptions) { - selectModalOptions = Object.assign({}, SELECT_MODAL_OPTIONS_DEFAULT, selectModalOptions); + selectModalOptions = Object.assign({}, SELECTMODALOPTIONSDEFAULT, selectModalOptions); super(plugin.app, selectModalOptions.elements ?? [], selectModalOptions.multiSelect); this.plugin = plugin; - this.title = selectModalOptions.modalTitle ?? ''; this.description = 'Select one or multiple search results.'; this.addSkipButton = selectModalOptions.skipButton ?? false; - + this.submitButtonText = 'Ok'; this.busy = false; - this.sendCallback = false; } diff --git a/src/modals/MediaDbSeasonSelectModal.ts b/src/modals/MediaDbSeasonSelectModal.ts index 1bde2d7..ca05d0e 100644 --- a/src/modals/MediaDbSeasonSelectModal.ts +++ b/src/modals/MediaDbSeasonSelectModal.ts @@ -18,8 +18,9 @@ export class MediaDbSeasonSelectModal extends SelectModal extends Modal { cancelButton?: ButtonComponent; skipButton?: ButtonComponent; submitButton?: ButtonComponent; + submitButtonText: string; elementWrapper?: HTMLDivElement; @@ -25,6 +26,7 @@ export abstract class SelectModal extends Modal { this.title = ''; this.description = ''; this.addSkipButton = false; + this.submitButtonText = 'Ok'; this.cancelButton = undefined; this.skipButton = undefined; this.submitButton = undefined; @@ -114,8 +116,8 @@ export abstract class SelectModal extends Modal { this.skipButton = btn; }); } - bottomSettingRow.addButton(btn => { - btn.setButtonText('Ok'); + bottomSettingRow.addButton((btn) => { + btn.setButtonText(this.submitButtonText); btn.setCta(); btn.onClick(() => this.submit()); btn.buttonEl.addClass('media-db-plugin-button'); diff --git a/src/utils/ModalHelper.ts b/src/utils/ModalHelper.ts index 4aeae61..4ba7c95 100644 --- a/src/utils/ModalHelper.ts +++ b/src/utils/ModalHelper.ts @@ -205,6 +205,13 @@ export const PREVIEW_MODAL_DEFAULT_OPTIONS: PreviewModalOptions = { elements: [], }; +export const SELECTMODALOPTIONSDEFAULT: SelectModalOptions = { + elements: [], + multiSelect: true, + modalTitle: '', + skipButton: false, +}; + /** * A class providing multiple usefull functions for dealing with the plugins modals. */ From d748d9840e800b9052d180d94502e48d6ce69b1b Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Wed, 14 Jan 2026 20:59:40 +0100 Subject: [PATCH 14/14] Added more clarity When searching for seasons the modal specifies that you must select only one series to proceed to the season selection screen --- src/main.ts | 24 ++++++++++++++++++------ src/modals/MediaDbSearchResultModal.ts | 4 ++-- src/modals/SelectModal.ts | 2 +- src/utils/ModalHelper.ts | 7 +++++-- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/main.ts b/src/main.ts index b1c2881..bab4f6a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -221,14 +221,26 @@ export default class MediaDbPlugin extends Plugin { while (!proceed) { if (types.length === 1 && types[0] === 'season') { selectResults = - (await this.modalHelper.openSelectModal({ elements: apiSearchResults }, async selectModalData => { - return selectModalData.selected; - })) ?? []; + (await this.modalHelper.openSelectModal( + { + elements: apiSearchResults, + description: 'Select one search result to proceed.', + submitButtonText: 'Ok', + }, + async selectModalData => { + return selectModalData.selected; + }, + )) ?? []; } else { selectResults = - (await this.modalHelper.openSelectModal({ elements: apiSearchResults }, async selectModalData => { - return await this.queryDetails(selectModalData.selected); - })) ?? []; + (await this.modalHelper.openSelectModal( + { + elements: apiSearchResults, + }, + async selectModalData => { + return await this.queryDetails(selectModalData.selected); + }, + )) ?? []; } if (!selectResults || selectResults.length < 1) { return; diff --git a/src/modals/MediaDbSearchResultModal.ts b/src/modals/MediaDbSearchResultModal.ts index a4cd146..1f34444 100644 --- a/src/modals/MediaDbSearchResultModal.ts +++ b/src/modals/MediaDbSearchResultModal.ts @@ -20,9 +20,9 @@ export class MediaDbSearchResultModal extends SelectModal { super(plugin.app, selectModalOptions.elements ?? [], selectModalOptions.multiSelect); this.plugin = plugin; this.title = selectModalOptions.modalTitle ?? ''; - this.description = 'Select one or multiple search results.'; + this.description = selectModalOptions.description ?? 'Select one or multiple search results.'; this.addSkipButton = selectModalOptions.skipButton ?? false; - this.submitButtonText = 'Ok'; + this.submitButtonText = selectModalOptions.submitButtonText ?? 'Ok'; this.busy = false; this.sendCallback = false; } diff --git a/src/modals/SelectModal.ts b/src/modals/SelectModal.ts index 0057e37..d54b5f9 100644 --- a/src/modals/SelectModal.ts +++ b/src/modals/SelectModal.ts @@ -116,7 +116,7 @@ export abstract class SelectModal extends Modal { this.skipButton = btn; }); } - bottomSettingRow.addButton((btn) => { + bottomSettingRow.addButton(btn => { btn.setButtonText(this.submitButtonText); btn.setCta(); btn.onClick(() => this.submit()); diff --git a/src/utils/ModalHelper.ts b/src/utils/ModalHelper.ts index 4ba7c95..79c7c7f 100644 --- a/src/utils/ModalHelper.ts +++ b/src/utils/ModalHelper.ts @@ -159,12 +159,13 @@ export interface IdSearchModalOptions { * - skipButton: whether to add a skip button to the modal */ export interface SelectModalOptions { - modalTitle?: string; elements?: MediaTypeModel[]; multiSelect?: boolean; + modalTitle?: string; skipButton?: boolean; + description?: string; // Add this + submitButtonText?: string; // Add this too } - /** * Options for the preview modal. * - modalTitle: the title of the modal @@ -210,6 +211,8 @@ export const SELECTMODALOPTIONSDEFAULT: SelectModalOptions = { multiSelect: true, modalTitle: '', skipButton: false, + description: 'Select one or multiple search results.', + submitButtonText: 'Ok', }; /**