openapi: '3.0.2' info: title: 'Seerr API' version: '1.0.0' description: | This is the documentation for the Seerr API backend. Two primary authentication methods are supported: - **Cookie Authentication**: A valid sign-in to the `/auth/plex` or `/auth/local` will generate a valid authentication cookie. - **API Key Authentication**: Sign-in is also possible by passing an `X-Api-Key` header along with a valid API Key generated by Seerr. tags: - name: public description: Public API endpoints requiring no authentication. - name: settings description: Endpoints related to Seerr's settings and configuration. - name: auth description: Endpoints related to logging in or out, and the currently authenticated user. - name: users description: Endpoints related to user management. - name: search description: Endpoints related to search and discovery. - name: request description: Endpoints related to request management. - name: movies description: Endpoints related to retrieving movies and their details. - name: tv description: Endpoints related to retrieving TV series and their details. - name: other description: Endpoints related to other TMDB data - name: person description: Endpoints related to retrieving person details. - name: media description: Endpoints related to media management. - name: collection description: Endpoints related to retrieving collection details. - name: service description: Endpoints related to getting service (Radarr/Sonarr) details. - name: watchlist description: Collection of media to watch later - name: blacklist description: Blacklisted media from discovery page. servers: - url: '{server}/api/v1' variables: server: default: http://localhost:5055 components: schemas: Blacklist: type: object properties: tmdbId: type: number example: 1 title: type: string media: $ref: '#/components/schemas/MediaInfo' userId: type: number example: 1 Watchlist: type: object properties: id: type: integer example: 1 readOnly: true tmdbId: type: number example: 1 ratingKey: type: string type: type: string title: type: string media: $ref: '#/components/schemas/MediaInfo' createdAt: type: string example: '2020-09-12T10:00:27.000Z' readOnly: true updatedAt: type: string example: '2020-09-12T10:00:27.000Z' readOnly: true requestedBy: $ref: '#/components/schemas/User' User: type: object properties: id: type: integer example: 1 readOnly: true email: type: string example: 'hey@itsme.com' readOnly: true username: type: string plexUsername: type: string readOnly: true plexToken: type: string readOnly: true jellyfinAuthToken: type: string readOnly: true userType: type: integer example: 1 readOnly: true permissions: type: number example: 0 avatar: type: string readOnly: true createdAt: type: string example: '2020-09-02T05:02:23.000Z' readOnly: true updatedAt: type: string example: '2020-09-02T05:02:23.000Z' readOnly: true requestCount: type: number example: 5 readOnly: true required: - id - email - createdAt - updatedAt UserSettings: type: object properties: username: type: string nullable: true example: 'Mr User' email: type: string example: 'user@example.com' discordId: type: string nullable: true example: '123456789' locale: type: string nullable: true example: 'en' discoverRegion: type: string nullable: true example: 'US' streamingRegion: type: string nullable: true example: 'US' originalLanguage: type: string nullable: true example: 'en' movieQuotaLimit: type: number nullable: true description: 'Maximum number of movie requests allowed' example: 10 movieQuotaDays: type: number nullable: true description: 'Time period in days for movie quota' example: 30 tvQuotaLimit: type: number nullable: true description: 'Maximum number of TV requests allowed' example: 5 tvQuotaDays: type: number nullable: true description: 'Time period in days for TV quota' example: 14 globalMovieQuotaDays: type: number nullable: true description: 'Global movie quota days setting' example: 30 globalMovieQuotaLimit: type: number nullable: true description: 'Global movie quota limit setting' example: 10 globalTvQuotaLimit: type: number nullable: true description: 'Global TV quota limit setting' example: 5 globalTvQuotaDays: type: number nullable: true description: 'Global TV quota days setting' example: 14 watchlistSyncMovies: type: boolean nullable: true description: 'Enable watchlist sync for movies' example: true watchlistSyncTv: type: boolean nullable: true description: 'Enable watchlist sync for TV' example: false MainSettings: type: object properties: apiKey: type: string readOnly: true appLanguage: type: string example: en applicationTitle: type: string example: Seerr applicationUrl: type: string example: https://os.example.com hideAvailable: type: boolean example: false partialRequestsEnabled: type: boolean example: false localLogin: type: boolean example: true mediaServerType: type: number example: 1 newPlexLogin: type: boolean example: true defaultPermissions: type: number example: 32 enableSpecialEpisodes: type: boolean example: false NetworkSettings: type: object properties: csrfProtection: type: boolean example: false forceIpv4First: type: boolean example: false trustProxy: type: boolean example: false proxy: type: object properties: enabled: type: boolean example: false hostname: type: string example: '' port: type: number example: 8080 useSsl: type: boolean example: false user: type: string example: '' password: type: string example: '' bypassFilter: type: string example: '' bypassLocalAddresses: type: boolean example: true dnsCache: type: object properties: enabled: type: boolean example: false forceMinTtl: type: number example: 0 forceMaxTtl: type: number example: -1 PlexLibrary: type: object properties: id: type: string name: type: string example: Movies enabled: type: boolean example: false required: - id - name - enabled PlexSettings: type: object properties: name: type: string example: 'Main Server' readOnly: true machineId: type: string example: '1234123412341234' readOnly: true ip: type: string example: '127.0.0.1' port: type: number example: 32400 useSsl: type: boolean nullable: true libraries: type: array readOnly: true items: $ref: '#/components/schemas/PlexLibrary' webAppUrl: type: string nullable: true example: 'https://app.plex.tv/desktop' required: - name - machineId - ip - port PlexConnection: type: object properties: protocol: type: string example: 'https' address: type: string example: '127.0.0.1' port: type: number example: 32400 uri: type: string example: 'https://127-0-0-1.2ab6ce1a093d465e910def96cf4e4799.plex.direct:32400' local: type: boolean example: true status: type: number example: 200 message: type: string example: 'OK' required: - protocol - address - port - uri - local PlexDevice: type: object properties: name: type: string example: 'My Plex Server' product: type: string example: 'Plex Media Server' productVersion: type: string example: '1.21' platform: type: string example: 'Linux' platformVersion: type: string example: 'default/linux/amd64/17.1/systemd' device: type: string example: 'PC' clientIdentifier: type: string example: '85a943ce-a0cc-4d2a-a4ec-f74f06e40feb' createdAt: type: string example: '2021-01-01T00:00:00.000Z' lastSeenAt: type: string example: '2021-01-01T00:00:00.000Z' provides: type: array items: type: string example: 'server' owned: type: boolean example: true ownerID: type: string example: '12345' home: type: boolean example: true sourceTitle: type: string example: 'xyzabc' accessToken: type: string example: 'supersecretaccesstoken' publicAddress: type: string example: '127.0.0.1' httpsRequired: type: boolean example: true synced: type: boolean example: true relay: type: boolean example: true dnsRebindingProtection: type: boolean example: false natLoopbackSupported: type: boolean example: false publicAddressMatches: type: boolean example: false presence: type: boolean example: true connection: type: array items: $ref: '#/components/schemas/PlexConnection' required: - name - product - productVersion - platform - device - clientIdentifier - createdAt - lastSeenAt - provides - owned - connection JellyfinLibrary: type: object properties: id: type: string name: type: string example: Movies enabled: type: boolean example: false required: - id - name - enabled JellyfinSettings: type: object properties: name: type: string example: 'Main Server' readOnly: true hostname: type: string example: 'http://my.jellyfin.host' externalHostname: type: string example: 'http://my.jellyfin.host' jellyfinForgotPasswordUrl: type: string example: 'http://my.jellyfin.host/web/index.html#!/forgotpassword.html' adminUser: type: string example: 'admin' adminPass: type: string example: 'mypassword' libraries: type: array readOnly: true items: $ref: '#/components/schemas/JellyfinLibrary' serverID: type: string readOnly: true MetadataSettings: type: object properties: settings: type: object properties: tv: type: string enum: [tvdb, tmdb] example: 'tvdb' anime: type: string enum: [tvdb, tmdb] example: 'tvdb' TautulliSettings: type: object properties: hostname: type: string nullable: true example: 'tautulli.example.com' port: type: number nullable: true example: 8181 useSsl: type: boolean nullable: true apiKey: type: string nullable: true externalUrl: type: string nullable: true RadarrSettings: type: object properties: id: type: number example: 0 readOnly: true name: type: string example: 'Radarr Main' hostname: type: string example: '127.0.0.1' port: type: number example: 7878 apiKey: type: string example: 'exampleapikey' useSsl: type: boolean example: false baseUrl: type: string activeProfileId: type: number example: 1 activeProfileName: type: string example: 720p/1080p activeDirectory: type: string example: '/movies' is4k: type: boolean example: false minimumAvailability: type: string example: 'In Cinema' isDefault: type: boolean example: false externalUrl: type: string example: http://radarr.example.com syncEnabled: type: boolean example: false preventSearch: type: boolean example: false required: - name - hostname - port - apiKey - useSsl - activeProfileId - activeProfileName - activeDirectory - is4k - minimumAvailability - isDefault SonarrSettings: type: object properties: id: type: number example: 0 readOnly: true name: type: string example: 'Sonarr Main' hostname: type: string example: '127.0.0.1' port: type: number example: 8989 apiKey: type: string example: 'exampleapikey' useSsl: type: boolean example: false baseUrl: type: string activeProfileId: type: number example: 1 activeProfileName: type: string example: 720p/1080p activeDirectory: type: string example: '/tv/' activeLanguageProfileId: type: number example: 1 activeAnimeProfileId: type: number nullable: true activeAnimeLanguageProfileId: type: number nullable: true activeAnimeProfileName: type: string example: 720p/1080p nullable: true activeAnimeDirectory: type: string nullable: true is4k: type: boolean example: false enableSeasonFolders: type: boolean example: false isDefault: type: boolean example: false externalUrl: type: string example: http://radarr.example.com syncEnabled: type: boolean example: false preventSearch: type: boolean example: false required: - name - hostname - port - apiKey - useSsl - activeProfileId - activeProfileName - activeDirectory - is4k - enableSeasonFolders - isDefault ServarrTag: type: object properties: id: type: number example: 1 label: type: string example: A Label PublicSettings: type: object properties: initialized: type: boolean example: false MovieResult: type: object required: - id - mediaType - title properties: id: type: number example: 1234 mediaType: type: string popularity: type: number example: 10 posterPath: type: string backdropPath: type: string voteCount: type: number voteAverage: type: number genreIds: type: array items: type: number overview: type: string example: 'Overview of the movie' originalLanguage: type: string example: 'en' title: type: string example: Movie Title originalTitle: type: string example: Original Movie Title releaseDate: type: string adult: type: boolean example: false video: type: boolean example: false mediaInfo: $ref: '#/components/schemas/MediaInfo' TvResult: type: object properties: id: type: number example: 1234 mediaType: type: string popularity: type: number example: 10 posterPath: type: string backdropPath: type: string voteCount: type: number voteAverage: type: number genreIds: type: array items: type: number overview: type: string example: 'Overview of the movie' originalLanguage: type: string example: 'en' name: type: string example: TV Show Name originalName: type: string example: Original TV Show Name originCountry: type: array items: type: string firstAirDate: type: string mediaInfo: $ref: '#/components/schemas/MediaInfo' PersonResult: type: object properties: id: type: number example: 12345 profilePath: type: string adult: type: boolean example: false mediaType: type: string default: 'person' knownFor: type: array items: oneOf: - $ref: '#/components/schemas/MovieResult' - $ref: '#/components/schemas/TvResult' Genre: type: object properties: id: type: number example: 1 name: type: string example: Adventure Company: type: object properties: id: type: number example: 1 logo_path: type: string nullable: true name: type: string ProductionCompany: type: object properties: id: type: number example: 1 logoPath: type: string nullable: true originCountry: type: string name: type: string Network: type: object properties: id: type: number example: 1 logoPath: type: string nullable: true originCountry: type: string name: type: string RelatedVideo: type: object properties: url: type: string example: https://www.youtube.com/watch?v=9qhL2_UxXM0/ key: type: string example: 9qhL2_UxXM0 name: type: string example: Trailer for some movie (1978) size: type: number example: 1080 type: type: string example: Trailer enum: - Clip - Teaser - Trailer - Featurette - Opening Credits - Behind the Scenes - Bloopers site: type: string enum: - 'YouTube' MovieDetails: type: object properties: id: type: number example: 123 readOnly: true imdbId: type: string example: 'tt123' adult: type: boolean backdropPath: type: string posterPath: type: string budget: type: number example: 1000000 genres: type: array items: $ref: '#/components/schemas/Genre' homepage: type: string relatedVideos: type: array items: $ref: '#/components/schemas/RelatedVideo' originalLanguage: type: string originalTitle: type: string overview: type: string popularity: type: number productionCompanies: type: array items: $ref: '#/components/schemas/ProductionCompany' productionCountries: type: array items: type: object properties: iso_3166_1: type: string name: type: string releaseDate: type: string releases: type: object properties: results: type: array items: type: object properties: iso_3166_1: type: string example: 'US' rating: type: string nullable: true release_dates: type: array items: type: object properties: certification: type: string example: 'PG-13' iso_639_1: type: string nullable: true note: type: string nullable: true example: 'Blu ray' release_date: type: string example: '2017-07-12T00:00:00.000Z' type: type: number example: 1 revenue: type: number nullable: true runtime: type: number spokenLanguages: type: array items: $ref: '#/components/schemas/SpokenLanguage' status: type: string tagline: type: string title: type: string video: type: boolean voteAverage: type: number voteCount: type: number credits: type: object properties: cast: type: array items: $ref: '#/components/schemas/Cast' crew: type: array items: $ref: '#/components/schemas/Crew' collection: type: object properties: id: type: number example: 1 name: type: string example: A collection posterPath: type: string backdropPath: type: string externalIds: $ref: '#/components/schemas/ExternalIds' mediaInfo: $ref: '#/components/schemas/MediaInfo' watchProviders: type: array items: $ref: '#/components/schemas/WatchProviders' Episode: type: object properties: id: type: number name: type: string airDate: type: string nullable: true episodeNumber: type: number overview: type: string productionCode: type: string seasonNumber: type: number showId: type: number stillPath: type: string nullable: true voteAverage: type: number voteCount: type: number Season: type: object properties: id: type: number airDate: type: string nullable: true episodeCount: type: number name: type: string overview: type: string posterPath: type: string seasonNumber: type: number episodes: type: array items: $ref: '#/components/schemas/Episode' TvDetails: type: object properties: id: type: number example: 123 backdropPath: type: string posterPath: type: string contentRatings: type: object properties: results: type: array items: type: object properties: iso_3166_1: type: string example: 'US' rating: type: string example: 'TV-14' createdBy: type: array items: type: object properties: id: type: number name: type: string gender: type: number profilePath: type: string nullable: true episodeRunTime: type: array items: type: number firstAirDate: type: string genres: type: array items: $ref: '#/components/schemas/Genre' homepage: type: string inProduction: type: boolean languages: type: array items: type: string lastAirDate: type: string lastEpisodeToAir: $ref: '#/components/schemas/Episode' name: type: string nextEpisodeToAir: $ref: '#/components/schemas/Episode' networks: type: array items: $ref: '#/components/schemas/ProductionCompany' numberOfEpisodes: type: number numberOfSeason: type: number originCountry: type: array items: type: string originalLanguage: type: string originalName: type: string overview: type: string popularity: type: number productionCompanies: type: array items: $ref: '#/components/schemas/ProductionCompany' productionCountries: type: array items: type: object properties: iso_3166_1: type: string name: type: string spokenLanguages: type: array items: $ref: '#/components/schemas/SpokenLanguage' seasons: type: array items: $ref: '#/components/schemas/Season' status: type: string tagline: type: string type: type: string voteAverage: type: number voteCount: type: number credits: type: object properties: cast: type: array items: $ref: '#/components/schemas/Cast' crew: type: array items: $ref: '#/components/schemas/Crew' externalIds: $ref: '#/components/schemas/ExternalIds' keywords: type: array items: $ref: '#/components/schemas/Keyword' mediaInfo: $ref: '#/components/schemas/MediaInfo' watchProviders: type: array items: $ref: '#/components/schemas/WatchProviders' MediaRequest: type: object properties: id: type: number example: 123 readOnly: true status: type: number example: 0 description: Status of the request. 1 = PENDING APPROVAL, 2 = APPROVED, 3 = DECLINED readOnly: true media: $ref: '#/components/schemas/MediaInfo' createdAt: type: string example: '2020-09-12T10:00:27.000Z' readOnly: true updatedAt: type: string example: '2020-09-12T10:00:27.000Z' readOnly: true requestedBy: $ref: '#/components/schemas/User' modifiedBy: anyOf: - $ref: '#/components/schemas/User' - type: string nullable: true is4k: type: boolean example: false serverId: type: number profileId: type: number rootFolder: type: string required: - id - status MediaInfo: type: object properties: id: type: number readOnly: true tmdbId: type: number readOnly: true tvdbId: type: number readOnly: true nullable: true status: type: number example: 0 description: Availability of the media. 1 = `UNKNOWN`, 2 = `PENDING`, 3 = `PROCESSING`, 4 = `PARTIALLY_AVAILABLE`, 5 = `AVAILABLE`, 6 = `DELETED` requests: type: array readOnly: true items: $ref: '#/components/schemas/MediaRequest' createdAt: type: string example: '2020-09-12T10:00:27.000Z' readOnly: true updatedAt: type: string example: '2020-09-12T10:00:27.000Z' readOnly: true Cast: type: object properties: id: type: number example: 123 castId: type: number example: 1 character: type: string example: Some Character Name creditId: type: string gender: type: number name: type: string example: Some Persons Name order: type: number profilePath: type: string nullable: true Crew: type: object properties: id: type: number example: 123 creditId: type: string gender: type: number name: type: string example: Some Persons Name job: type: string department: type: string profilePath: type: string nullable: true ExternalIds: type: object properties: facebookId: type: string nullable: true freebaseId: type: string nullable: true freebaseMid: type: string nullable: true imdbId: type: string nullable: true instagramId: type: string nullable: true tvdbId: type: number nullable: true tvrageId: type: number nullable: true twitterId: type: string nullable: true ServiceProfile: type: object properties: id: type: number example: 1 name: type: string example: 720p/1080p PageInfo: type: object properties: page: type: number example: 1 pages: type: number example: 10 results: type: number example: 100 DiscordSettings: type: object properties: enabled: type: boolean example: false types: type: number example: 2 options: type: object properties: botUsername: type: string botAvatarUrl: type: string webhookUrl: type: string webhookRoleId: type: string enableMentions: type: boolean SlackSettings: type: object properties: enabled: type: boolean example: false types: type: number example: 2 options: type: object properties: webhookUrl: type: string WebPushSettings: type: object properties: enabled: type: boolean example: false types: type: number example: 2 WebhookSettings: type: object properties: enabled: type: boolean example: false types: type: number example: 2 options: type: object properties: webhookUrl: type: string authHeader: type: string jsonPayload: type: string supportVariables: type: boolean example: false TelegramSettings: type: object properties: enabled: type: boolean example: false types: type: number example: 2 options: type: object properties: botUsername: type: string botAPI: type: string chatId: type: string messageThreadId: type: string sendSilently: type: boolean PushbulletSettings: type: object properties: enabled: type: boolean example: false types: type: number example: 2 options: type: object properties: accessToken: type: string channelTag: type: string nullable: true PushoverSettings: type: object properties: enabled: type: boolean example: false types: type: number example: 2 options: type: object properties: accessToken: type: string userToken: type: string sound: type: string GotifySettings: type: object properties: enabled: type: boolean example: false types: type: number example: 2 options: type: object properties: url: type: string token: type: string NtfySettings: type: object properties: enabled: type: boolean example: false types: type: number example: 2 options: type: object properties: url: type: string topic: type: string authMethodUsernamePassword: type: boolean username: type: string password: type: string authMethodToken: type: boolean token: type: string NotificationEmailSettings: type: object properties: enabled: type: boolean example: false types: type: number example: 2 options: type: object properties: emailFrom: type: string example: no-reply@example.com senderName: type: string example: Seerr smtpHost: type: string example: 127.0.0.1 smtpPort: type: number example: 465 secure: type: boolean example: false ignoreTls: type: boolean example: false requireTls: type: boolean example: false authUser: type: string nullable: true authPass: type: string nullable: true allowSelfSigned: type: boolean example: false Job: type: object properties: id: type: string example: job-name type: type: string enum: [process, command] interval: type: string enum: [short, long, fixed] name: type: string example: A Job Name nextExecutionTime: type: string example: '2020-09-02T05:02:23.000Z' running: type: boolean example: false PersonDetails: type: object properties: id: type: number example: 1 name: type: string deathday: type: string knownForDepartment: type: string alsoKnownAs: type: array items: type: string gender: type: string biography: type: string popularity: type: string placeOfBirth: type: string profilePath: type: string adult: type: boolean imdbId: type: string homepage: type: string CreditCast: type: object properties: id: type: number example: 1 originalLanguage: type: string episodeCount: type: number overview: type: string originCountry: type: array items: type: string originalName: type: string voteCount: type: number name: type: string mediaType: type: string popularity: type: number creditId: type: string backdropPath: type: string firstAirDate: type: string voteAverage: type: number genreIds: type: array items: type: number posterPath: type: string originalTitle: type: string video: type: boolean title: type: string adult: type: boolean releaseDate: type: string character: type: string mediaInfo: $ref: '#/components/schemas/MediaInfo' CreditCrew: type: object properties: id: type: number example: 1 originalLanguage: type: string episodeCount: type: number overview: type: string originCountry: type: array items: type: string originalName: type: string voteCount: type: number name: type: string mediaType: type: string popularity: type: number creditId: type: string backdropPath: type: string firstAirDate: type: string voteAverage: type: number genreIds: type: array items: type: number posterPath: type: string originalTitle: type: string video: type: boolean title: type: string adult: type: boolean releaseDate: type: string department: type: string job: type: string mediaInfo: $ref: '#/components/schemas/MediaInfo' Keyword: type: object properties: id: type: number example: 1 name: type: string example: 'anime' SpokenLanguage: type: object properties: englishName: type: string example: 'English' nullable: true iso_639_1: type: string example: 'en' name: type: string example: 'English' Collection: type: object properties: id: type: number example: 123 name: type: string example: A Movie Collection overview: type: string example: Overview of collection posterPath: type: string backdropPath: type: string parts: type: array items: $ref: '#/components/schemas/MovieResult' SonarrSeries: type: object properties: title: type: string example: COVID-25 sortTitle: type: string example: covid 25 seasonCount: type: number example: 1 status: type: string example: upcoming overview: type: string example: The thread is picked up again by Marianne Schmidt which ... network: type: string example: CBS airTime: type: string example: 02:15 images: type: array items: type: object properties: coverType: type: string example: banner url: type: string example: /sonarr/MediaCoverProxy/6467f05d9872726ad08cbf920e5fee4bf69198682260acab8eab5d3c2c958e92/5c8f116c6aa5c.jpg remotePoster: type: string example: https://artworks.thetvdb.com/banners/posters/5c8f116129983.jpg seasons: type: array items: type: object properties: seasonNumber: type: number example: 1 monitored: type: boolean example: true year: type: number example: 2015 path: type: string profileId: type: number languageProfileId: type: number seasonFolder: type: boolean monitored: type: boolean useSceneNumbering: type: boolean runtime: type: number tvdbId: type: number example: 12345 tvRageId: type: number tvMazeId: type: number firstAired: type: string lastInfoSync: type: string nullable: true seriesType: type: string cleanTitle: type: string imdbId: type: string titleSlug: type: string certification: type: string genres: type: array items: type: string tags: type: array items: type: string added: type: string ratings: type: array items: type: object properties: votes: type: number value: type: number qualityProfileId: type: number id: type: number nullable: true rootFolderPath: type: string nullable: true addOptions: type: array items: type: object properties: ignoreEpisodesWithFiles: type: boolean nullable: true ignoreEpisodesWithoutFiles: type: boolean nullable: true searchForMissingEpisodes: type: boolean nullable: true UserSettingsNotifications: type: object properties: notificationTypes: $ref: '#/components/schemas/NotificationAgentTypes' emailEnabled: type: boolean pgpKey: type: string nullable: true discordEnabled: type: boolean discordEnabledTypes: type: number nullable: true discordId: type: string nullable: true pushbulletAccessToken: type: string nullable: true pushoverApplicationToken: type: string nullable: true pushoverUserKey: type: string nullable: true pushoverSound: type: string nullable: true telegramEnabled: type: boolean telegramBotUsername: type: string nullable: true telegramChatId: type: string nullable: true telegramMessageThreadId: type: string nullable: true telegramSendSilently: type: boolean nullable: true NotificationAgentTypes: type: object properties: discord: type: number email: type: number pushbullet: type: number pushover: type: number slack: type: number telegram: type: number webhook: type: number webpush: type: number WatchProviders: type: array items: type: object properties: iso_3166_1: type: string link: type: string buy: type: array items: $ref: '#/components/schemas/WatchProviderDetails' flatrate: items: $ref: '#/components/schemas/WatchProviderDetails' WatchProviderDetails: type: object properties: displayPriority: type: number logoPath: type: string id: type: number name: type: string Issue: type: object properties: id: type: number example: 1 issueType: type: number example: 1 media: $ref: '#/components/schemas/MediaInfo' createdBy: $ref: '#/components/schemas/User' modifiedBy: $ref: '#/components/schemas/User' comments: type: array items: $ref: '#/components/schemas/IssueComment' IssueComment: type: object properties: id: type: number example: 1 user: $ref: '#/components/schemas/User' message: type: string example: A comment DiscoverSlider: type: object properties: id: type: number example: 1 type: type: number example: 1 title: type: string nullable: true isBuiltIn: type: boolean enabled: type: boolean data: type: string example: '1234' nullable: true required: - type - enabled - title - data WatchProviderRegion: type: object properties: iso_3166_1: type: string english_name: type: string native_name: type: string OverrideRule: type: object properties: id: type: string Certification: type: object properties: certification: type: string example: 'PG-13' meaning: type: string example: 'Some material may be inappropriate for children under 13.' nullable: true order: type: number example: 3 nullable: true required: - certification CertificationResponse: type: object properties: certifications: type: object additionalProperties: type: array items: $ref: '#/components/schemas/Certification' example: certifications: US: - certification: 'G' meaning: 'All ages admitted' order: 1 - certification: 'PG' meaning: 'Some material may not be suitable for children under 10.' order: 2 securitySchemes: cookieAuth: type: apiKey name: connect.sid in: cookie apiKey: type: apiKey in: header name: X-Api-Key paths: /status: get: summary: Get Seerr status description: Returns the current Seerr status in a JSON object. security: [] tags: - public responses: '200': description: Returned status content: application/json: schema: type: object properties: version: type: string example: 1.0.0 commitTag: type: string updateAvailable: type: boolean commitsBehind: type: number restartRequired: type: boolean /status/appdata: get: summary: Get application data volume status description: For Docker installs, returns whether or not the volume mount was configured properly. Always returns true for non-Docker installs. security: [] tags: - public responses: '200': description: Application data volume status and path content: application/json: schema: type: object properties: appData: type: boolean example: true appDataPath: type: string example: /app/config appDataPermissions: type: boolean example: true /settings/main: get: summary: Get main settings description: Retrieves all main settings in a JSON object. tags: - settings responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MainSettings' post: summary: Update main settings description: Updates main settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MainSettings' responses: '200': description: 'Values were sucessfully updated' content: application/json: schema: $ref: '#/components/schemas/MainSettings' /settings/network: get: summary: Get network settings description: Retrieves all network settings in a JSON object. tags: - settings responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MainSettings' post: summary: Update network settings description: Updates network settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/NetworkSettings' responses: '200': description: 'Values were sucessfully updated' content: application/json: schema: $ref: '#/components/schemas/NetworkSettings' /settings/main/regenerate: post: summary: Get main settings with newly-generated API key description: Returns main settings in a JSON object, using the new API key. tags: - settings responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MainSettings' /settings/jellyfin: get: summary: Get Jellyfin settings description: Retrieves current Jellyfin settings. tags: - settings responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/JellyfinSettings' post: summary: Update Jellyfin settings description: Updates Jellyfin settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/JellyfinSettings' responses: '200': description: 'Values were successfully updated' content: application/json: schema: $ref: '#/components/schemas/JellyfinSettings' /settings/jellyfin/library: get: summary: Get Jellyfin libraries description: Returns a list of Jellyfin libraries in a JSON array. tags: - settings parameters: - in: query name: sync description: Syncs the current libraries with the current Jellyfin server schema: type: string nullable: true - in: query name: enable explode: false allowReserved: true description: Comma separated list of libraries to enable. Any libraries not passed will be disabled! schema: type: string nullable: true responses: '200': description: 'Jellyfin libraries returned' content: application/json: schema: type: array items: $ref: '#/components/schemas/JellyfinLibrary' /settings/jellyfin/users: get: summary: Get Jellyfin Users description: Returns a list of Jellyfin Users in a JSON array. tags: - settings - users responses: '200': description: Jellyfin users returned content: application/json: schema: type: array items: type: object properties: username: type: string id: type: string thumb: type: string email: type: string /settings/jellyfin/sync: get: summary: Get status of full Jellyfin library sync description: Returns sync progress in a JSON array. tags: - settings responses: '200': description: Status of Jellyfin sync content: application/json: schema: type: object properties: running: type: boolean example: false progress: type: number example: 0 total: type: number example: 100 currentLibrary: $ref: '#/components/schemas/JellyfinLibrary' libraries: type: array items: $ref: '#/components/schemas/JellyfinLibrary' post: summary: Start full Jellyfin library sync description: Runs a full Jellyfin library sync and returns the progress in a JSON array. tags: - settings requestBody: content: application/json: schema: type: object properties: cancel: type: boolean example: false start: type: boolean example: false responses: '200': description: Status of Jellyfin sync content: application/json: schema: type: object properties: running: type: boolean example: false progress: type: number example: 0 total: type: number example: 100 currentLibrary: $ref: '#/components/schemas/JellyfinLibrary' libraries: type: array items: $ref: '#/components/schemas/JellyfinLibrary' /settings/plex: get: summary: Get Plex settings description: Retrieves current Plex settings. tags: - settings responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PlexSettings' post: summary: Update Plex settings description: Updates Plex settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PlexSettings' responses: '200': description: 'Values were successfully updated' content: application/json: schema: $ref: '#/components/schemas/PlexSettings' /settings/plex/library: get: summary: Get Plex libraries description: Returns a list of Plex libraries in a JSON array. tags: - settings parameters: - in: query name: sync description: Syncs the current libraries with the current Plex server schema: type: string nullable: true - in: query name: enable explode: false allowReserved: true description: Comma separated list of libraries to enable. Any libraries not passed will be disabled! schema: type: string nullable: true responses: '200': description: 'Plex libraries returned' content: application/json: schema: type: array items: $ref: '#/components/schemas/PlexLibrary' /settings/plex/sync: get: summary: Get status of full Plex library scan description: Returns scan progress in a JSON array. tags: - settings responses: '200': description: Status of Plex scan content: application/json: schema: type: object properties: running: type: boolean example: false progress: type: number example: 0 total: type: number example: 100 currentLibrary: $ref: '#/components/schemas/PlexLibrary' libraries: type: array items: $ref: '#/components/schemas/PlexLibrary' post: summary: Start full Plex library scan description: Runs a full Plex library scan and returns the progress in a JSON array. tags: - settings requestBody: content: application/json: schema: type: object properties: cancel: type: boolean example: false start: type: boolean example: false responses: '200': description: Status of Plex scan content: application/json: schema: type: object properties: running: type: boolean example: false progress: type: number example: 0 total: type: number example: 100 currentLibrary: $ref: '#/components/schemas/PlexLibrary' libraries: type: array items: $ref: '#/components/schemas/PlexLibrary' /settings/plex/devices/servers: get: summary: Gets the user's available Plex servers description: Returns a list of available Plex servers and their connectivity state tags: - settings responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/PlexDevice' /settings/plex/users: get: summary: Get Plex users description: | Returns a list of Plex users in a JSON array. Requires the `MANAGE_USERS` permission. tags: - settings - users responses: '200': description: Plex users content: application/json: schema: type: array items: type: object properties: id: type: string title: type: string username: type: string email: type: string thumb: type: string /settings/metadatas: get: summary: Get Metadata settings description: Retrieves current Metadata settings. tags: - settings responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MetadataSettings' put: summary: Update Metadata settings description: Updates Metadata settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MetadataSettings' responses: '200': description: 'Values were successfully updated' content: application/json: schema: $ref: '#/components/schemas/MetadataSettings' /settings/metadatas/test: post: summary: Test Provider configuration description: Tests if the TVDB configuration is valid. Returns a list of available languages on success. tags: - settings requestBody: required: true content: application/json: schema: type: object properties: tmdb: type: boolean example: true tvdb: type: boolean example: true responses: '200': description: Succesfully connected to TVDB content: application/json: schema: type: object properties: message: type: string example: 'Successfully connected to TVDB' /settings/tautulli: get: summary: Get Tautulli settings description: Retrieves current Tautulli settings. tags: - settings responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/TautulliSettings' post: summary: Update Tautulli settings description: Updates Tautulli settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TautulliSettings' responses: '200': description: 'Values were successfully updated' content: application/json: schema: $ref: '#/components/schemas/TautulliSettings' /settings/radarr: get: summary: Get Radarr settings description: Returns all Radarr settings in a JSON array. tags: - settings responses: '200': description: 'Values were returned' content: application/json: schema: type: array items: $ref: '#/components/schemas/RadarrSettings' post: summary: Create Radarr instance description: Creates a new Radarr instance from the request body. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RadarrSettings' responses: '201': description: 'New Radarr instance created' content: application/json: schema: $ref: '#/components/schemas/RadarrSettings' /settings/radarr/test: post: summary: Test Radarr configuration description: Tests if the Radarr configuration is valid. Returns profiles and root folders on success. tags: - settings requestBody: required: true content: application/json: schema: type: object properties: hostname: type: string example: '127.0.0.1' port: type: number example: 7878 apiKey: type: string example: yourapikey useSsl: type: boolean example: false baseUrl: type: string required: - hostname - port - apiKey - useSsl responses: '200': description: Succesfully connected to Radarr instance content: application/json: schema: type: object properties: profiles: type: array items: $ref: '#/components/schemas/ServiceProfile' /settings/radarr/{radarrId}: put: summary: Update Radarr instance description: Updates an existing Radarr instance with the provided values. tags: - settings parameters: - in: path name: radarrId required: true schema: type: integer description: Radarr instance ID requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RadarrSettings' responses: '200': description: 'Radarr instance updated' content: application/json: schema: $ref: '#/components/schemas/RadarrSettings' delete: summary: Delete Radarr instance description: Deletes an existing Radarr instance based on the radarrId parameter. tags: - settings parameters: - in: path name: radarrId required: true schema: type: integer description: Radarr instance ID responses: '200': description: 'Radarr instance updated' content: application/json: schema: $ref: '#/components/schemas/RadarrSettings' /settings/radarr/{radarrId}/profiles: get: summary: Get available Radarr profiles description: Returns a list of profiles available on the Radarr server instance in a JSON array. tags: - settings parameters: - in: path name: radarrId required: true schema: type: integer description: Radarr instance ID responses: '200': description: Returned list of profiles content: application/json: schema: type: array items: $ref: '#/components/schemas/ServiceProfile' /settings/sonarr: get: summary: Get Sonarr settings description: Returns all Sonarr settings in a JSON array. tags: - settings responses: '200': description: 'Values were returned' content: application/json: schema: type: array items: $ref: '#/components/schemas/SonarrSettings' post: summary: Create Sonarr instance description: Creates a new Sonarr instance from the request body. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SonarrSettings' responses: '201': description: 'New Sonarr instance created' content: application/json: schema: $ref: '#/components/schemas/SonarrSettings' /settings/sonarr/test: post: summary: Test Sonarr configuration description: Tests if the Sonarr configuration is valid. Returns profiles and root folders on success. tags: - settings requestBody: required: true content: application/json: schema: type: object properties: hostname: type: string example: '127.0.0.1' port: type: number example: 8989 apiKey: type: string example: yourapikey useSsl: type: boolean example: false baseUrl: type: string required: - hostname - port - apiKey - useSsl responses: '200': description: Succesfully connected to Sonarr instance content: application/json: schema: type: object properties: profiles: type: array items: $ref: '#/components/schemas/ServiceProfile' /settings/sonarr/{sonarrId}: put: summary: Update Sonarr instance description: Updates an existing Sonarr instance with the provided values. tags: - settings parameters: - in: path name: sonarrId required: true schema: type: integer description: Sonarr instance ID requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SonarrSettings' responses: '200': description: 'Sonarr instance updated' content: application/json: schema: $ref: '#/components/schemas/SonarrSettings' delete: summary: Delete Sonarr instance description: Deletes an existing Sonarr instance based on the sonarrId parameter. tags: - settings parameters: - in: path name: sonarrId required: true schema: type: integer description: Sonarr instance ID responses: '200': description: 'Sonarr instance updated' content: application/json: schema: $ref: '#/components/schemas/SonarrSettings' /settings/public: get: summary: Get public settings security: [] description: Returns settings that are not protected or sensitive. Mainly used to determine if the application has been configured for the first time. tags: - settings responses: '200': description: Public settings returned content: application/json: schema: $ref: '#/components/schemas/PublicSettings' /settings/initialize: post: summary: Initialize application description: Sets the app as initialized, allowing the user to navigate to pages other than the setup page. tags: - settings responses: '200': description: Public settings returned content: application/json: schema: $ref: '#/components/schemas/PublicSettings' /settings/jobs: get: summary: Get scheduled jobs description: Returns list of all scheduled jobs and details about their next execution time in a JSON array. tags: - settings responses: '200': description: Scheduled jobs returned content: application/json: schema: type: array items: $ref: '#/components/schemas/Job' /settings/jobs/{jobId}/run: post: summary: Invoke a specific job description: Invokes a specific job to run. Will return the new job status in JSON format. tags: - settings parameters: - in: path name: jobId required: true schema: type: string responses: '200': description: Invoked job returned content: application/json: schema: $ref: '#/components/schemas/Job' /settings/jobs/{jobId}/cancel: post: summary: Cancel a specific job description: Cancels a specific job. Will return the new job status in JSON format. tags: - settings parameters: - in: path name: jobId required: true schema: type: string responses: '200': description: Canceled job returned content: application/json: schema: $ref: '#/components/schemas/Job' /settings/jobs/{jobId}/schedule: post: summary: Modify job schedule description: Re-registers the job with the schedule specified. Will return the job in JSON format. tags: - settings parameters: - in: path name: jobId required: true schema: type: string requestBody: required: true content: application/json: schema: type: object properties: schedule: type: string example: '0 */5 * * * *' responses: '200': description: Rescheduled job content: application/json: schema: $ref: '#/components/schemas/Job' /settings/cache: get: summary: Get a list of active caches description: Retrieves a list of all active caches and their current stats. tags: - settings responses: '200': description: Caches returned content: application/json: schema: type: object properties: imageCache: type: object properties: tmdb: type: object properties: size: type: number example: 123456 imageCount: type: number example: 123 avatar: type: object properties: size: type: number example: 123456 imageCount: type: number example: 123 dnsCache: type: object properties: stats: type: object properties: size: type: number example: 1 maxSize: type: number example: 500 hits: type: number example: 19 misses: type: number example: 1 failures: type: number example: 0 ipv4Fallbacks: type: number example: 0 hitRate: type: number example: 0.95 entries: type: array additionalProperties: type: object properties: addresses: type: object properties: ipv4: type: number example: 1 ipv6: type: number example: 1 activeAddress: type: string example: 127.0.0.1 family: type: number example: 4 age: type: number example: 10 ttl: type: number example: 10 networkErrors: type: number example: 0 hits: type: number example: 1 misses: type: number example: 1 apiCaches: type: array items: type: object properties: id: type: string example: cache-id name: type: string example: cache name stats: type: object properties: hits: type: number misses: type: number keys: type: number ksize: type: number vsize: type: number /settings/cache/{cacheId}/flush: post: summary: Flush a specific cache description: Flushes all data from the cache ID provided tags: - settings parameters: - in: path name: cacheId required: true schema: type: string responses: '204': description: 'Flushed cache' /settings/cache/dns/{dnsEntry}/flush: post: summary: Flush a specific DNS cache entry description: Flushes a specific DNS cache entry tags: - settings parameters: - in: path name: dnsEntry required: true schema: type: string responses: '204': description: 'Flushed dns cache' /settings/logs: get: summary: Returns logs description: Returns list of all log items and details tags: - settings parameters: - in: query name: take schema: type: number nullable: true example: 25 - in: query name: skip schema: type: number nullable: true example: 0 - in: query name: filter schema: type: string nullable: true enum: [debug, info, warn, error] default: debug - in: query name: search schema: type: string nullable: true example: plex responses: '200': description: Server log returned content: application/json: schema: type: array items: type: object properties: label: type: string example: server level: type: string example: info message: type: string example: Server ready on port 5055 timestamp: type: string example: '2020-12-15T16:20:00.069Z' /settings/notifications/email: get: summary: Get email notification settings description: Returns current email notification settings in a JSON object. tags: - settings responses: '200': description: Returned email settings content: application/json: schema: $ref: '#/components/schemas/NotificationEmailSettings' post: summary: Update email notification settings description: Updates email notification settings with provided values tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/NotificationEmailSettings' responses: '200': description: 'Values were sucessfully updated' content: application/json: schema: $ref: '#/components/schemas/NotificationEmailSettings' /settings/notifications/email/test: post: summary: Test email settings description: Sends a test notification to the email agent. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/NotificationEmailSettings' responses: '204': description: Test notification attempted /settings/notifications/discord: get: summary: Get Discord notification settings description: Returns current Discord notification settings in a JSON object. tags: - settings responses: '200': description: Returned Discord settings content: application/json: schema: $ref: '#/components/schemas/DiscordSettings' post: summary: Update Discord notification settings description: Updates Discord notification settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DiscordSettings' responses: '200': description: 'Values were sucessfully updated' content: application/json: schema: $ref: '#/components/schemas/DiscordSettings' /settings/notifications/discord/test: post: summary: Test Discord settings description: Sends a test notification to the Discord agent. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DiscordSettings' responses: '204': description: Test notification attempted /settings/notifications/pushbullet: get: summary: Get Pushbullet notification settings description: Returns current Pushbullet notification settings in a JSON object. tags: - settings responses: '200': description: Returned Pushbullet settings content: application/json: schema: $ref: '#/components/schemas/PushbulletSettings' post: summary: Update Pushbullet notification settings description: Update Pushbullet notification settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PushbulletSettings' responses: '200': description: 'Values were sucessfully updated' content: application/json: schema: $ref: '#/components/schemas/PushbulletSettings' /settings/notifications/pushbullet/test: post: summary: Test Pushbullet settings description: Sends a test notification to the Pushbullet agent. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PushbulletSettings' responses: '204': description: Test notification attempted /settings/notifications/pushover: get: summary: Get Pushover notification settings description: Returns current Pushover notification settings in a JSON object. tags: - settings responses: '200': description: Returned Pushover settings content: application/json: schema: $ref: '#/components/schemas/PushoverSettings' post: summary: Update Pushover notification settings description: Update Pushover notification settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PushoverSettings' responses: '200': description: 'Values were sucessfully updated' content: application/json: schema: $ref: '#/components/schemas/PushoverSettings' /settings/notifications/pushover/test: post: summary: Test Pushover settings description: Sends a test notification to the Pushover agent. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PushoverSettings' responses: '204': description: Test notification attempted /settings/notifications/pushover/sounds: get: summary: Get Pushover sounds description: Returns valid Pushover sound options in a JSON array. tags: - settings parameters: - in: query name: token required: true schema: type: string nullable: false responses: '200': description: Returned Pushover settings content: application/json: schema: type: array items: type: object properties: name: type: string description: type: string /settings/notifications/gotify: get: summary: Get Gotify notification settings description: Returns current Gotify notification settings in a JSON object. tags: - settings responses: '200': description: Returned Gotify settings content: application/json: schema: $ref: '#/components/schemas/GotifySettings' post: summary: Update Gotify notification settings description: Update Gotify notification settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GotifySettings' responses: '200': description: 'Values were sucessfully updated' content: application/json: schema: $ref: '#/components/schemas/GotifySettings' /settings/notifications/gotify/test: post: summary: Test Gotify settings description: Sends a test notification to the Gotify agent. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GotifySettings' responses: '204': description: Test notification attempted /settings/notifications/ntfy: get: summary: Get ntfy.sh notification settings description: Returns current ntfy.sh notification settings in a JSON object. tags: - settings responses: '200': description: Returned ntfy.sh settings content: application/json: schema: $ref: '#/components/schemas/NtfySettings' post: summary: Update ntfy.sh notification settings description: Update ntfy.sh notification settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/NtfySettings' responses: '200': description: 'Values were sucessfully updated' content: application/json: schema: $ref: '#/components/schemas/NtfySettings' /settings/notifications/ntfy/test: post: summary: Test ntfy.sh settings description: Sends a test notification to the ntfy.sh agent. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/NtfySettings' responses: '204': description: Test notification attempted /settings/notifications/slack: get: summary: Get Slack notification settings description: Returns current Slack notification settings in a JSON object. tags: - settings responses: '200': description: Returned slack settings content: application/json: schema: $ref: '#/components/schemas/SlackSettings' post: summary: Update Slack notification settings description: Updates Slack notification settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SlackSettings' responses: '200': description: 'Values were sucessfully updated' content: application/json: schema: $ref: '#/components/schemas/SlackSettings' /settings/notifications/slack/test: post: summary: Test Slack settings description: Sends a test notification to the Slack agent. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SlackSettings' responses: '204': description: Test notification attempted /settings/notifications/telegram: get: summary: Get Telegram notification settings description: Returns current Telegram notification settings in a JSON object. tags: - settings responses: '200': description: Returned Telegram settings content: application/json: schema: $ref: '#/components/schemas/TelegramSettings' post: summary: Update Telegram notification settings description: Update Telegram notification settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TelegramSettings' responses: '200': description: 'Values were sucessfully updated' content: application/json: schema: $ref: '#/components/schemas/TelegramSettings' /settings/notifications/telegram/test: post: summary: Test Telegram settings description: Sends a test notification to the Telegram agent. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TelegramSettings' responses: '204': description: Test notification attempted /settings/notifications/webpush: get: summary: Get Web Push notification settings description: Returns current Web Push notification settings in a JSON object. tags: - settings responses: '200': description: Returned web push settings content: application/json: schema: $ref: '#/components/schemas/WebPushSettings' post: summary: Update Web Push notification settings description: Updates Web Push notification settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebPushSettings' responses: '200': description: 'Values were sucessfully updated' content: application/json: schema: $ref: '#/components/schemas/WebPushSettings' /settings/notifications/webpush/test: post: summary: Test Web Push settings description: Sends a test notification to the Web Push agent. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebPushSettings' responses: '204': description: Test notification attempted /settings/notifications/webhook: get: summary: Get webhook notification settings description: Returns current webhook notification settings in a JSON object. tags: - settings responses: '200': description: Returned webhook settings content: application/json: schema: $ref: '#/components/schemas/WebhookSettings' post: summary: Update webhook notification settings description: Updates webhook notification settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebhookSettings' responses: '200': description: 'Values were sucessfully updated' content: application/json: schema: $ref: '#/components/schemas/WebhookSettings' /settings/notifications/webhook/test: post: summary: Test webhook settings description: Sends a test notification to the webhook agent. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebhookSettings' responses: '204': description: Test notification attempted /settings/discover: get: summary: Get all discover sliders description: Returns all discovery sliders. Built-in and custom made. tags: - settings responses: '200': description: Returned all discovery sliders content: application/json: schema: type: array items: $ref: '#/components/schemas/DiscoverSlider' post: summary: Batch update all sliders. description: | Batch update all sliders at once. Should also be used for creation. Will only update sliders provided and will not delete any sliders not present in the request. If a slider is missing a required field, it will be ignored. Requires the `ADMIN` permission. tags: - settings requestBody: required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/DiscoverSlider' responses: '200': description: Returned all newly updated discovery sliders content: application/json: schema: type: array items: $ref: '#/components/schemas/DiscoverSlider' /settings/discover/{sliderId}: put: summary: Update a single slider description: | Updates a single slider and return the newly updated slider. Requires the `ADMIN` permission. tags: - settings parameters: - in: path name: sliderId required: true schema: type: number requestBody: required: true content: application/json: schema: type: object properties: title: type: string example: 'Slider Title' type: type: number example: 1 data: type: string example: '1' responses: '200': description: Returns newly added discovery slider content: application/json: schema: $ref: '#/components/schemas/DiscoverSlider' delete: summary: Delete slider by ID description: Deletes the slider with the provided sliderId. Requires the `ADMIN` permission. tags: - settings parameters: - in: path name: sliderId required: true schema: type: number responses: '200': description: Slider successfully deleted content: application/json: schema: $ref: '#/components/schemas/DiscoverSlider' /settings/discover/add: post: summary: Add a new slider description: | Add a single slider and return the newly created slider. Requires the `ADMIN` permission. tags: - settings requestBody: required: true content: application/json: schema: type: object properties: title: type: string example: 'New Slider' type: type: number example: 1 data: type: string example: '1' responses: '200': description: Returns newly added discovery slider content: application/json: schema: $ref: '#/components/schemas/DiscoverSlider' /settings/discover/reset: get: summary: Reset all discover sliders description: Resets all discovery sliders to the default values. Requires the `ADMIN` permission. tags: - settings responses: '204': description: All sliders reset to defaults /settings/about: get: summary: Get server stats description: Returns current server stats in a JSON object. tags: - settings responses: '200': description: Returned about settings content: application/json: schema: type: object properties: version: type: string example: '1.0.0' totalRequests: type: number example: 100 totalMediaItems: type: number example: 100 tz: type: string nullable: true example: Asia/Tokyo appDataPath: type: string example: /app/config /auth/me: get: summary: Get logged-in user description: Returns the currently logged-in user. tags: - auth - users responses: '200': description: Object containing the logged-in user in JSON content: application/json: schema: $ref: '#/components/schemas/User' /auth/plex: post: summary: Sign in using a Plex token description: Takes an `authToken` (Plex token) to log the user in. Generates a session cookie for use in further requests. If the user does not exist, and there are no other users, then a user will be created with full admin privileges. If a user logs in with access to the main Plex server, they will also have an account created, but without any permissions. security: [] tags: - auth responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/User' requestBody: required: true content: application/json: schema: type: object properties: authToken: type: string required: - authToken /auth/jellyfin: post: summary: Sign in using a Jellyfin username and password description: Takes the user's username and password to log the user in. Generates a session cookie for use in further requests. If the user does not exist, and there are no other users, then a user will be created with full admin privileges. If a user logs in with access to the Jellyfin server, they will also have an account created, but without any permissions. security: [] tags: - auth responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/User' requestBody: required: true content: application/json: schema: type: object properties: username: type: string password: type: string hostname: type: string email: type: string serverType: type: number required: - username - password /auth/local: post: summary: Sign in using a local account description: Takes an `email` and a `password` to log the user in. Generates a session cookie for use in further requests. security: [] tags: - auth responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/User' requestBody: required: true content: application/json: schema: type: object properties: email: type: string password: type: string required: - email - password /auth/logout: post: summary: Sign out and clear session cookie description: Completely clear the session cookie and associated values, effectively signing the user out. tags: - auth responses: '200': description: OK content: application/json: schema: type: object properties: status: type: string example: 'ok' /auth/reset-password: post: summary: Send a reset password email description: Sends a reset password email to the email if the user exists security: [] tags: - users responses: '200': description: OK content: application/json: schema: type: object properties: status: type: string example: 'ok' requestBody: required: true content: application/json: schema: type: object properties: email: type: string required: - email /auth/reset-password/{guid}: post: summary: Reset the password for a user description: Resets the password for a user if the given guid is connected to a user security: [] tags: - users parameters: - in: path name: guid required: true schema: type: string example: '9afef5a7-ec89-4d5f-9397-261e96970b50' responses: '200': description: OK content: application/json: schema: type: object properties: status: type: string example: 'ok' requestBody: required: true content: application/json: schema: type: object properties: password: type: string required: - password /user: get: summary: Get all users description: Returns all users in a JSON object. tags: - users parameters: - in: query name: take schema: type: number nullable: true example: 20 - in: query name: skip schema: type: number nullable: true example: 0 - in: query name: sort schema: type: string enum: [created, updated, requests, displayname] default: created - in: query name: q required: false schema: type: string - in: query name: includeIds required: false schema: type: string responses: '200': description: A JSON array of all users content: application/json: schema: type: object properties: pageInfo: $ref: '#/components/schemas/PageInfo' results: type: array items: $ref: '#/components/schemas/User' post: summary: Create new user description: | Creates a new user. Requires the `MANAGE_USERS` permission. tags: - users requestBody: required: true content: application/json: schema: type: object properties: email: type: string example: 'hey@itsme.com' username: type: string permissions: type: number responses: '201': description: The created user content: application/json: schema: $ref: '#/components/schemas/User' put: summary: Update batch of users description: | Update users with given IDs with provided values in request `body.settings`. You cannot update users' Plex tokens through this request. Requires the `MANAGE_USERS` permission. tags: - users requestBody: required: true content: application/json: schema: type: object properties: ids: type: array items: type: integer permissions: type: integer responses: '200': description: Successfully updated user details content: application/json: schema: type: array items: $ref: '#/components/schemas/User' /user/import-from-plex: post: summary: Import all users from Plex description: | Fetches and imports users from the Plex server. If a list of Plex IDs is provided in the request body, only the specified users will be imported. Otherwise, all users will be imported. Requires the `MANAGE_USERS` permission. tags: - users requestBody: required: false content: application/json: schema: type: object properties: plexIds: type: array items: type: string responses: '201': description: A list of the newly created users content: application/json: schema: type: array items: $ref: '#/components/schemas/User' /user/import-from-jellyfin: post: summary: Import all users from Jellyfin description: | Fetches and imports users from the Jellyfin server. Requires the `MANAGE_USERS` permission. tags: - users requestBody: required: false content: application/json: schema: type: object properties: jellyfinUserIds: type: array items: type: string responses: '201': description: A list of the newly created users content: application/json: schema: type: array items: $ref: '#/components/schemas/User' /user/registerPushSubscription: post: summary: Register a web push /user/registerPushSubscription description: Registers a web push subscription for the logged-in user tags: - users requestBody: required: true content: application/json: schema: type: object properties: endpoint: type: string auth: type: string p256dh: type: string userAgent: type: string required: - endpoint - auth - p256dh responses: '204': description: Successfully registered push subscription /user/{userId}/pushSubscriptions: get: summary: Get all web push notification settings for a user description: | Returns all web push notification settings for a user in a JSON object. tags: - users parameters: - in: path name: userId required: true schema: type: number responses: '200': description: User web push notification settings in JSON content: application/json: schema: type: object properties: endpoint: type: string p256dh: type: string auth: type: string userAgent: type: string /user/{userId}/pushSubscription/{endpoint}: get: summary: Get web push notification settings for a user description: | Returns web push notification settings for a user in a JSON object. tags: - users parameters: - in: path name: userId required: true schema: type: number - in: path name: endpoint required: true schema: type: string responses: '200': description: User web push notification settings in JSON content: application/json: schema: type: object properties: endpoint: type: string p256dh: type: string auth: type: string userAgent: type: string delete: summary: Delete user push subscription by key description: Deletes the user push subscription with the provided key. tags: - users parameters: - in: path name: userId required: true schema: type: number - in: path name: endpoint required: true schema: type: string responses: '204': description: Successfully removed user push subscription /user/{userId}: get: summary: Get user by ID description: | Retrieves user details in a JSON object. Requires the `MANAGE_USERS` permission. tags: - users parameters: - in: path name: userId required: true schema: type: number responses: '200': description: Users details in JSON content: application/json: schema: $ref: '#/components/schemas/User' put: summary: Update a user by user ID description: | Update a user with the provided values. You cannot update a user's Plex token through this request. Requires the `MANAGE_USERS` permission. tags: - users parameters: - in: path name: userId required: true schema: type: number requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/User' responses: '200': description: Successfully updated user details content: application/json: schema: $ref: '#/components/schemas/User' delete: summary: Delete user by ID description: Deletes the user with the provided userId. Requires the `MANAGE_USERS` permission. tags: - users parameters: - in: path name: userId required: true schema: type: number responses: '200': description: User successfully deleted content: application/json: schema: $ref: '#/components/schemas/User' /user/{userId}/requests: get: summary: Get requests for a specific user description: | Retrieves a user's requests in a JSON object. tags: - users parameters: - in: path name: userId required: true schema: type: number - in: query name: take schema: type: number nullable: true example: 20 - in: query name: skip schema: type: number nullable: true example: 0 responses: '200': description: User's requests returned content: application/json: schema: type: object properties: pageInfo: $ref: '#/components/schemas/PageInfo' results: type: array items: $ref: '#/components/schemas/MediaRequest' /user/{userId}/quota: get: summary: Get quotas for a specific user description: | Returns quota details for a user in a JSON object. Requires `MANAGE_USERS` permission if viewing other users. tags: - users parameters: - in: path name: userId required: true schema: type: number responses: '200': description: User quota details in JSON content: application/json: schema: type: object properties: movie: type: object properties: days: type: number example: 7 limit: type: number example: 10 used: type: number example: 6 remaining: type: number example: 4 restricted: type: boolean example: false tv: type: object properties: days: type: number example: 7 limit: type: number example: 10 used: type: number example: 6 remaining: type: number example: 4 restricted: type: boolean example: false /blacklist: get: summary: Returns blacklisted items description: Returns list of all blacklisted media tags: - settings parameters: - in: query name: take schema: type: number nullable: true example: 25 - in: query name: skip schema: type: number nullable: true example: 0 - in: query name: search schema: type: string nullable: true example: dune - in: query name: filter schema: type: string enum: [all, manual, blacklistedTags] default: manual responses: '200': description: Blacklisted items returned content: application/json: schema: type: object properties: pageInfo: $ref: '#/components/schemas/PageInfo' results: type: array items: type: object properties: user: $ref: '#/components/schemas/User' createdAt: type: string example: 2024-04-21T01:55:44.000Z id: type: number example: 1 mediaType: type: string example: movie title: type: string example: Dune tmdbId: type: number example: 438631 post: summary: Add media to blacklist tags: - blacklist requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Blacklist' responses: '201': description: Item succesfully blacklisted '412': description: Item has already been blacklisted /blacklist/{tmdbId}: get: summary: Get media from blacklist tags: - blacklist parameters: - in: path name: tmdbId description: tmdbId ID required: true example: '1' schema: type: string responses: '200': description: Blacklist details in JSON delete: summary: Remove media from blacklist tags: - blacklist parameters: - in: path name: tmdbId description: tmdbId ID required: true example: '1' schema: type: string responses: '204': description: Succesfully removed media item /watchlist: post: summary: Add media to watchlist tags: - watchlist requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Watchlist' responses: '200': description: Watchlist data returned content: application/json: schema: $ref: '#/components/schemas/Watchlist' /watchlist/{tmdbId}: delete: summary: Delete watchlist item description: Removes a watchlist item. tags: - watchlist parameters: - in: path name: tmdbId description: tmdbId ID required: true example: '1' schema: type: string responses: '204': description: Succesfully removed watchlist item /user/{userId}/watchlist: get: summary: Get the Plex watchlist for a specific user description: | Retrieves a user's Plex Watchlist in a JSON object. tags: - users - watchlist parameters: - in: path name: userId required: true schema: type: number - in: query name: page schema: type: number example: 1 default: 1 responses: '200': description: Watchlist data returned content: application/json: schema: type: object properties: page: type: number totalPages: type: number totalResults: type: number results: type: array items: type: object properties: tmdbId: type: number example: 1 ratingKey: type: string type: type: string title: type: string /user/{userId}/settings/main: get: summary: Get general settings for a user description: Returns general settings for a specific user. Requires `MANAGE_USERS` permission if viewing other users. tags: - users parameters: - in: path name: userId required: true schema: type: number responses: '200': description: User general settings returned content: application/json: schema: $ref: '#/components/schemas/UserSettings' post: summary: Update general settings for a user description: Updates and returns general settings for a specific user. Requires `MANAGE_USERS` permission if editing other users. tags: - users parameters: - in: path name: userId required: true schema: type: number requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserSettings' responses: '200': description: Updated user general settings returned content: application/json: schema: $ref: '#/components/schemas/UserSettings' /user/{userId}/settings/password: get: summary: Get password page informatiom description: Returns important data for the password page to function correctly. Requires `MANAGE_USERS` permission if viewing other users. tags: - users parameters: - in: path name: userId required: true schema: type: number responses: '200': description: User password page information returned content: application/json: schema: type: object properties: hasPassword: type: boolean example: true post: summary: Update password for a user description: Updates a user's password. Requires `MANAGE_USERS` permission if editing other users. tags: - users parameters: - in: path name: userId required: true schema: type: number requestBody: required: true content: application/json: schema: type: object properties: currentPassword: type: string nullable: true newPassword: type: string required: - newPassword responses: '204': description: User password updated /user/{userId}/settings/linked-accounts/plex: post: summary: Link the provided Plex account to the current user description: Logs in to Plex with the provided auth token, then links the associated Plex account with the user's account. Users can only link external accounts to their own account. tags: - users parameters: - in: path name: userId required: true schema: type: number requestBody: required: true content: application/json: schema: type: object properties: authToken: type: string required: - authToken responses: '204': description: Linking account succeeded '403': description: Invalid credentials '422': description: Account already linked to a user delete: summary: Remove the linked Plex account for a user description: Removes the linked Plex account for a specific user. Requires `MANAGE_USERS` permission if editing other users. tags: - users parameters: - in: path name: userId required: true schema: type: number responses: '204': description: Unlinking account succeeded '400': description: Unlink request invalid '404': description: User does not exist /user/{userId}/settings/linked-accounts/jellyfin: post: summary: Link the provided Jellyfin account to the current user description: Logs in to Jellyfin with the provided credentials, then links the associated Jellyfin account with the user's account. Users can only link external accounts to their own account. tags: - users parameters: - in: path name: userId required: true schema: type: number requestBody: required: true content: application/json: schema: type: object properties: username: type: string example: 'Mr User' password: type: string example: 'supersecret' responses: '204': description: Linking account succeeded '403': description: Invalid credentials '422': description: Account already linked to a user delete: summary: Remove the linked Jellyfin account for a user description: Removes the linked Jellyfin account for a specific user. Requires `MANAGE_USERS` permission if editing other users. tags: - users parameters: - in: path name: userId required: true schema: type: number responses: '204': description: Unlinking account succeeded '400': description: Unlink request invalid '404': description: User does not exist /user/{userId}/settings/notifications: get: summary: Get notification settings for a user description: Returns notification settings for a specific user. Requires `MANAGE_USERS` permission if viewing other users. tags: - users parameters: - in: path name: userId required: true schema: type: number responses: '200': description: User notification settings returned content: application/json: schema: $ref: '#/components/schemas/UserSettingsNotifications' post: summary: Update notification settings for a user description: Updates and returns notification settings for a specific user. Requires `MANAGE_USERS` permission if editing other users. tags: - users parameters: - in: path name: userId required: true schema: type: number requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserSettingsNotifications' responses: '200': description: Updated user notification settings returned content: application/json: schema: $ref: '#/components/schemas/UserSettingsNotifications' /user/{userId}/settings/permissions: get: summary: Get permission settings for a user description: Returns permission settings for a specific user. Requires `MANAGE_USERS` permission if viewing other users. tags: - users parameters: - in: path name: userId required: true schema: type: number responses: '200': description: User permission settings returned content: application/json: schema: type: object properties: permissions: type: number example: 2 post: summary: Update permission settings for a user description: Updates and returns permission settings for a specific user. Requires `MANAGE_USERS` permission if editing other users. tags: - users parameters: - in: path name: userId required: true schema: type: number requestBody: required: true content: application/json: schema: type: object properties: permissions: type: number required: - permissions responses: '200': description: Updated user general settings returned content: application/json: schema: type: object properties: permissions: type: number example: 2 /user/{userId}/watch_data: get: summary: Get watch data description: | Returns play count, play duration, and recently watched media. Requires the `ADMIN` permission to fetch results for other users. tags: - users parameters: - in: path name: userId required: true schema: type: number responses: '200': description: Users content: application/json: schema: type: object properties: recentlyWatched: type: array items: $ref: '#/components/schemas/MediaInfo' playCount: type: number /search: get: summary: Search for movies, TV shows, or people description: Returns a list of movies, TV shows, or people a JSON object. tags: - search parameters: - in: query name: query required: true schema: type: string example: 'Mulan' - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: Results content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 results: type: array items: anyOf: - $ref: '#/components/schemas/MovieResult' - $ref: '#/components/schemas/TvResult' - $ref: '#/components/schemas/PersonResult' /search/keyword: get: summary: Search for keywords description: Returns a list of TMDB keywords matching the search query tags: - search parameters: - in: query name: query required: true schema: type: string example: 'christmas' - in: query name: page schema: type: number example: 1 default: 1 responses: '200': description: Results content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 results: type: array items: $ref: '#/components/schemas/Keyword' /search/company: get: summary: Search for companies description: Returns a list of TMDB companies matching the search query. (Will not return origin country) tags: - search parameters: - in: query name: query required: true schema: type: string example: 'Disney' - in: query name: page schema: type: number example: 1 default: 1 responses: '200': description: Results content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 results: type: array items: $ref: '#/components/schemas/Company' /discover/movies: get: summary: Discover movies description: Returns a list of movies in a JSON object. tags: - search parameters: - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en - in: query name: genre schema: type: string example: 18 - in: query name: studio schema: type: number example: 1 - in: query name: keywords schema: type: string example: 1,2 - in: query name: excludeKeywords schema: type: string example: 3,4 description: Comma-separated list of keyword IDs to exclude from results - in: query name: sortBy schema: type: string example: popularity.desc - in: query name: primaryReleaseDateGte schema: type: string example: 2022-01-01 - in: query name: primaryReleaseDateLte schema: type: string example: 2023-01-01 - in: query name: withRuntimeGte schema: type: number example: 60 - in: query name: withRuntimeLte schema: type: number example: 120 - in: query name: voteAverageGte schema: type: number example: 7 - in: query name: voteAverageLte schema: type: number example: 10 - in: query name: voteCountGte schema: type: number example: 7 - in: query name: voteCountLte schema: type: number example: 10 - in: query name: watchRegion schema: type: string example: US - in: query name: watchProviders schema: type: string example: 8|9 - in: query name: certification schema: type: string example: PG-13 description: Exact certification to filter by (used when certificationMode is 'exact') - in: query name: certificationGte schema: type: string example: G description: Minimum certification to filter by (used when certificationMode is 'range') - in: query name: certificationLte schema: type: string example: PG-13 description: Maximum certification to filter by (used when certificationMode is 'range') - in: query name: certificationCountry schema: type: string example: US description: Country code for the certification system (e.g., US, GB, CA) - in: query name: certificationMode schema: type: string enum: [exact, range] example: exact description: Determines whether to use exact certification matching or a certification range (internal use only, not sent to TMDB API) responses: '200': description: Results content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 results: type: array items: $ref: '#/components/schemas/MovieResult' /discover/movies/genre/{genreId}: get: summary: Discover movies by genre description: Returns a list of movies based on the provided genre ID in a JSON object. tags: - search parameters: - in: path name: genreId required: true schema: type: string example: '1' - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: Results content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 genre: $ref: '#/components/schemas/Genre' results: type: array items: $ref: '#/components/schemas/MovieResult' /discover/movies/language/{language}: get: summary: Discover movies by original language description: Returns a list of movies based on the provided ISO 639-1 language code in a JSON object. tags: - search parameters: - in: path name: language required: true schema: type: string example: en - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: Results content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 language: $ref: '#/components/schemas/SpokenLanguage' results: type: array items: $ref: '#/components/schemas/MovieResult' /discover/movies/studio/{studioId}: get: summary: Discover movies by studio description: Returns a list of movies based on the provided studio ID in a JSON object. tags: - search parameters: - in: path name: studioId required: true schema: type: string example: '1' - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: Results content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 studio: $ref: '#/components/schemas/ProductionCompany' results: type: array items: $ref: '#/components/schemas/MovieResult' /discover/movies/upcoming: get: summary: Upcoming movies description: Returns a list of movies in a JSON object. tags: - search parameters: - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: Results content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 results: type: array items: $ref: '#/components/schemas/MovieResult' /discover/tv: get: summary: Discover TV shows description: Returns a list of TV shows in a JSON object. tags: - search parameters: - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en - in: query name: genre schema: type: string example: 18 - in: query name: network schema: type: number example: 1 - in: query name: keywords schema: type: string example: 1,2 - in: query name: excludeKeywords schema: type: string example: 3,4 description: Comma-separated list of keyword IDs to exclude from results - in: query name: sortBy schema: type: string example: popularity.desc - in: query name: firstAirDateGte schema: type: string example: 2022-01-01 - in: query name: firstAirDateLte schema: type: string example: 2023-01-01 - in: query name: withRuntimeGte schema: type: number example: 60 - in: query name: withRuntimeLte schema: type: number example: 120 - in: query name: voteAverageGte schema: type: number example: 7 - in: query name: voteAverageLte schema: type: number example: 10 - in: query name: voteCountGte schema: type: number example: 7 - in: query name: voteCountLte schema: type: number example: 10 - in: query name: watchRegion schema: type: string example: US - in: query name: watchProviders schema: type: string example: 8|9 - in: query name: status schema: type: string example: 3|4 - in: query name: certification schema: type: string example: TV-14 description: Exact certification to filter by (used when certificationMode is 'exact') - in: query name: certificationGte schema: type: string example: TV-PG description: Minimum certification to filter by (used when certificationMode is 'range') - in: query name: certificationLte schema: type: string example: TV-MA description: Maximum certification to filter by (used when certificationMode is 'range') - in: query name: certificationCountry schema: type: string example: US description: Country code for the certification system (e.g., US, GB, CA) - in: query name: certificationMode schema: type: string enum: [exact, range] example: exact description: Determines whether to use exact certification matching or a certification range (internal use only, not sent to TMDB API) responses: '200': description: Results content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 results: type: array items: $ref: '#/components/schemas/TvResult' /discover/tv/language/{language}: get: summary: Discover TV shows by original language description: Returns a list of TV shows based on the provided ISO 639-1 language code in a JSON object. tags: - search parameters: - in: path name: language required: true schema: type: string example: en - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: Results content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 language: $ref: '#/components/schemas/SpokenLanguage' results: type: array items: $ref: '#/components/schemas/TvResult' /discover/tv/genre/{genreId}: get: summary: Discover TV shows by genre description: Returns a list of TV shows based on the provided genre ID in a JSON object. tags: - search parameters: - in: path name: genreId required: true schema: type: string example: '1' - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: Results content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 genre: $ref: '#/components/schemas/Genre' results: type: array items: $ref: '#/components/schemas/TvResult' /discover/tv/network/{networkId}: get: summary: Discover TV shows by network description: Returns a list of TV shows based on the provided network ID in a JSON object. tags: - search parameters: - in: path name: networkId required: true schema: type: string example: '1' - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: Results content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 network: $ref: '#/components/schemas/Network' results: type: array items: $ref: '#/components/schemas/TvResult' /discover/tv/upcoming: get: summary: Discover Upcoming TV shows description: Returns a list of upcoming TV shows in a JSON object. tags: - search parameters: - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: Results content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 results: type: array items: $ref: '#/components/schemas/TvResult' /discover/trending: get: summary: Trending movies and TV description: Returns a list of movies and TV shows in a JSON object. tags: - search parameters: - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: Results content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 results: type: array items: anyOf: - $ref: '#/components/schemas/MovieResult' - $ref: '#/components/schemas/TvResult' - $ref: '#/components/schemas/PersonResult' /discover/keyword/{keywordId}/movies: get: summary: Get movies from keyword description: Returns list of movies based on the provided keyword ID a JSON object. tags: - search parameters: - in: path name: keywordId required: true schema: type: number example: 207317 - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: List of movies content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 results: type: array items: $ref: '#/components/schemas/MovieResult' /discover/genreslider/movie: get: summary: Get genre slider data for movies description: Returns a list of genres with backdrops attached tags: - search parameters: - in: query name: language schema: type: string example: en responses: '200': description: Genre slider data returned content: application/json: schema: type: array items: type: object properties: id: type: number example: 1 backdrops: type: array items: type: string name: type: string example: Genre Name /discover/genreslider/tv: get: summary: Get genre slider data for TV series description: Returns a list of genres with backdrops attached tags: - search parameters: - in: query name: language schema: type: string example: en responses: '200': description: Genre slider data returned content: application/json: schema: type: array items: type: object properties: id: type: number example: 1 backdrops: type: array items: type: string name: type: string example: Genre Name /discover/watchlist: get: summary: Get the Plex watchlist. tags: - search parameters: - in: query name: page schema: type: number example: 1 default: 1 responses: '200': description: Watchlist data returned content: application/json: schema: type: object properties: page: type: number totalPages: type: number totalResults: type: number results: type: array items: type: object properties: tmdbId: type: number example: 1 ratingKey: type: string type: type: string title: type: string /request: get: summary: Get all requests description: | Returns all requests if the user has the `ADMIN` or `MANAGE_REQUESTS` permissions. Otherwise, only the logged-in user's requests are returned. If the `requestedBy` parameter is specified, only requests from that particular user ID will be returned. tags: - request parameters: - in: query name: take schema: type: number nullable: true example: 20 - in: query name: skip schema: type: number nullable: true example: 0 - in: query name: filter schema: type: string nullable: true enum: [ all, approved, available, pending, processing, unavailable, failed, deleted, completed, ] - in: query name: sort schema: type: string enum: [added, modified] default: added - in: query name: sortDirection schema: type: string enum: [asc, desc] nullable: true default: desc - in: query name: requestedBy schema: type: number nullable: true example: 1 - in: query name: mediaType schema: type: string enum: [movie, tv, all] nullable: true default: all responses: '200': description: Requests returned content: application/json: schema: type: object properties: pageInfo: $ref: '#/components/schemas/PageInfo' results: type: array items: $ref: '#/components/schemas/MediaRequest' post: summary: Create new request description: | Creates a new request with the provided media ID and type. The `REQUEST` permission is required. If the user has the `ADMIN` or `AUTO_APPROVE` permissions, their request will be auomatically approved. tags: - request requestBody: required: true content: application/json: schema: type: object properties: mediaType: type: string enum: [movie, tv] example: movie mediaId: type: number example: 123 tvdbId: type: number example: 123 seasons: oneOf: - type: array items: type: number minimum: 0 - type: string enum: [all] is4k: type: boolean example: false serverId: type: number profileId: type: number rootFolder: type: string languageProfileId: type: number userId: type: number nullable: true required: - mediaType - mediaId responses: '201': description: Succesfully created the request content: application/json: schema: $ref: '#/components/schemas/MediaRequest' /request/count: get: summary: Gets request counts description: | Returns the number of requests by status including pending, approved, available, and completed requests. tags: - request responses: '200': description: Request counts returned content: application/json: schema: type: object properties: total: type: number movie: type: number tv: type: number pending: type: number approved: type: number declined: type: number processing: type: number available: type: number completed: type: number /request/{requestId}: get: summary: Get MediaRequest description: Returns a specific MediaRequest in a JSON object. tags: - request parameters: - in: path name: requestId description: Request ID required: true example: '1' schema: type: string responses: '200': description: Succesfully returns request content: application/json: schema: $ref: '#/components/schemas/MediaRequest' put: summary: Update MediaRequest description: Updates a specific media request and returns the request in a JSON object. Requires the `MANAGE_REQUESTS` permission. tags: - request parameters: - in: path name: requestId description: Request ID required: true example: '1' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: mediaType: type: string enum: [movie, tv] seasons: type: array items: type: number minimum: 0 is4k: type: boolean example: false serverId: type: number profileId: type: number rootFolder: type: string languageProfileId: type: number userId: type: number nullable: true required: - mediaType responses: '200': description: Succesfully updated request content: application/json: schema: $ref: '#/components/schemas/MediaRequest' delete: summary: Delete request description: Removes a request. If the user has the `MANAGE_REQUESTS` permission, any request can be removed. Otherwise, only pending requests can be removed. tags: - request parameters: - in: path name: requestId description: Request ID required: true example: '1' schema: type: string responses: '204': description: Succesfully removed request /request/{requestId}/retry: post: summary: Retry failed request description: | Retries a request by resending requests to Sonarr or Radarr. Requires the `MANAGE_REQUESTS` permission or `ADMIN`. tags: - request parameters: - in: path name: requestId description: Request ID required: true schema: type: string example: '1' responses: '200': description: Retry triggered content: application/json: schema: $ref: '#/components/schemas/MediaRequest' /request/{requestId}/{status}: post: summary: Update a request's status description: | Updates a request's status to approved or declined. Also returns the request in a JSON object. Requires the `MANAGE_REQUESTS` permission or `ADMIN`. tags: - request parameters: - in: path name: requestId description: Request ID required: true schema: type: string example: '1' - in: path name: status description: New status required: true schema: type: string enum: [approve, decline] responses: '200': description: Request status changed content: application/json: schema: $ref: '#/components/schemas/MediaRequest' /movie/{movieId}: get: summary: Get movie details description: Returns full movie details in a JSON object. tags: - movies parameters: - in: path name: movieId required: true schema: type: number example: 337401 - in: query name: language schema: type: string example: en responses: '200': description: Movie details content: application/json: schema: $ref: '#/components/schemas/MovieDetails' /movie/{movieId}/recommendations: get: summary: Get recommended movies description: Returns list of recommended movies based on provided movie ID in a JSON object. tags: - movies parameters: - in: path name: movieId required: true schema: type: number example: 337401 - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: List of movies content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 results: type: array items: $ref: '#/components/schemas/MovieResult' /movie/{movieId}/similar: get: summary: Get similar movies description: Returns list of similar movies based on the provided movieId in a JSON object. tags: - movies parameters: - in: path name: movieId required: true schema: type: number example: 337401 - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: List of movies content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 results: type: array items: $ref: '#/components/schemas/MovieResult' /movie/{movieId}/ratings: get: summary: Get movie ratings description: Returns ratings based on the provided movieId in a JSON object. tags: - movies parameters: - in: path name: movieId required: true schema: type: number example: 337401 responses: '200': description: Ratings returned content: application/json: schema: type: object properties: title: type: string example: Mulan year: type: number example: 2020 url: type: string example: 'http://www.rottentomatoes.com/m/mulan_2020/' criticsScore: type: number example: 85 criticsRating: type: string enum: ['Rotten', 'Fresh', 'Certified Fresh'] audienceScore: type: number example: 65 audienceRating: type: string enum: ['Spilled', 'Upright'] /movie/{movieId}/ratingscombined: get: summary: Get RT and IMDB movie ratings combined description: Returns ratings from RottenTomatoes and IMDB based on the provided movieId in a JSON object. tags: - movies parameters: - in: path name: movieId required: true schema: type: number example: 337401 responses: '200': description: Ratings returned content: application/json: schema: type: object properties: rt: type: object properties: title: type: string example: Mulan year: type: number example: 2020 url: type: string example: 'http://www.rottentomatoes.com/m/mulan_2020/' criticsScore: type: number example: 85 criticsRating: type: string enum: ['Rotten', 'Fresh', 'Certified Fresh'] audienceScore: type: number example: 65 audienceRating: type: string enum: ['Spilled', 'Upright'] imdb: type: object properties: title: type: string example: I am Legend url: type: string example: 'https://www.imdb.com/title/tt0480249' criticsScore: type: number example: 6.5 /tv/{tvId}: get: summary: Get TV details description: Returns full TV details in a JSON object. tags: - tv parameters: - in: path name: tvId required: true schema: type: number example: 76479 - in: query name: language schema: type: string example: en responses: '200': description: TV details content: application/json: schema: $ref: '#/components/schemas/TvDetails' /tv/{tvId}/season/{seasonNumber}: get: summary: Get season details and episode list description: Returns season details with a list of episodes in a JSON object. tags: - tv parameters: - in: path name: tvId required: true schema: type: number example: 76479 - in: path name: seasonNumber required: true schema: type: number example: 123456 - in: query name: language schema: type: string example: en responses: '200': description: TV details content: application/json: schema: $ref: '#/components/schemas/Season' /tv/{tvId}/recommendations: get: summary: Get recommended TV series description: Returns list of recommended TV series based on the provided tvId in a JSON object. tags: - tv parameters: - in: path name: tvId required: true schema: type: number example: 76479 - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: List of TV series content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 results: type: array items: $ref: '#/components/schemas/TvResult' /tv/{tvId}/similar: get: summary: Get similar TV series description: Returns list of similar TV series based on the provided tvId in a JSON object. tags: - tv parameters: - in: path name: tvId required: true schema: type: number example: 76479 - in: query name: page schema: type: number example: 1 default: 1 - in: query name: language schema: type: string example: en responses: '200': description: List of TV series content: application/json: schema: type: object properties: page: type: number example: 1 totalPages: type: number example: 20 totalResults: type: number example: 200 results: type: array items: $ref: '#/components/schemas/TvResult' /tv/{tvId}/ratings: get: summary: Get TV ratings description: Returns ratings based on provided tvId in a JSON object. tags: - tv parameters: - in: path name: tvId required: true schema: type: number example: 76479 responses: '200': description: Ratings returned content: application/json: schema: type: object properties: title: type: string example: The Boys year: type: number example: 2019 url: type: string example: 'http://www.rottentomatoes.com/m/mulan_2020/' criticsScore: type: number example: 85 criticsRating: type: string enum: ['Rotten', 'Fresh'] /person/{personId}: get: summary: Get person details description: Returns person details based on provided personId in a JSON object. tags: - person parameters: - in: path name: personId required: true schema: type: number example: 287 - in: query name: language schema: type: string example: en responses: '200': description: Returned person content: application/json: schema: $ref: '#/components/schemas/PersonDetails' /person/{personId}/combined_credits: get: summary: Get combined credits description: Returns the person's combined credits based on the provided personId in a JSON object. tags: - person parameters: - in: path name: personId required: true schema: type: number example: 287 - in: query name: language schema: type: string example: en responses: '200': description: Returned combined credits content: application/json: schema: type: object properties: cast: type: array items: $ref: '#/components/schemas/CreditCast' crew: type: array items: $ref: '#/components/schemas/CreditCrew' id: type: number /media: get: summary: Get media description: Returns all media (can be filtered and limited) in a JSON object. tags: - media parameters: - in: query name: take schema: type: number nullable: true example: 20 - in: query name: skip schema: type: number nullable: true example: 0 - in: query name: filter schema: type: string nullable: true enum: [ all, available, partial, allavailable, processing, pending, deleted, ] - in: query name: sort schema: type: string enum: [added, modified, mediaAdded] default: added responses: '200': description: Returned media content: application/json: schema: type: object properties: pageInfo: $ref: '#/components/schemas/PageInfo' results: type: array items: $ref: '#/components/schemas/MediaInfo' /media/{mediaId}: delete: summary: Delete media item description: Removes a media item. The `MANAGE_REQUESTS` permission is required to perform this action. tags: - media parameters: - in: path name: mediaId description: Media ID required: true example: '1' schema: type: string responses: '204': description: Succesfully removed media item /media/{mediaId}/file: delete: summary: Delete media file description: Removes a media file from radarr/sonarr. The `ADMIN` permission is required to perform this action. tags: - media parameters: - in: path name: mediaId description: Media ID required: true example: '1' schema: type: string - in: query name: is4k description: Whether to remove from 4K service instance (true) or regular service instance (false) required: false example: false schema: type: boolean responses: '204': description: Successfully removed media item /media/{mediaId}/{status}: post: summary: Update media status description: Updates a media item's status and returns the media in JSON format tags: - media parameters: - in: path name: mediaId description: Media ID required: true example: '1' schema: type: string - in: path name: status description: New status required: true example: available schema: type: string enum: [available, partial, processing, pending, unknown, deleted] requestBody: content: application/json: schema: type: object properties: is4k: type: boolean example: false description: | When true, updates the 4K status field (status4k). When false or not provided, updates the regular status field (status). This applies to all status values (available, partial, processing, pending, unknown). responses: '200': description: Returned media content: application/json: schema: $ref: '#/components/schemas/MediaInfo' /media/{mediaId}/watch_data: get: summary: Get watch data description: | Returns play count, play duration, and users who have watched the media. Requires the `ADMIN` permission. tags: - media parameters: - in: path name: mediaId description: Media ID required: true example: '1' schema: type: string responses: '200': description: Users content: application/json: schema: type: object properties: data: type: object properties: playCount7Days: type: number playCount30Days: type: number playCount: type: number users: type: array items: $ref: '#/components/schemas/User' data4k: type: object properties: playCount7Days: type: number playCount30Days: type: number playCount: type: number users: type: array items: $ref: '#/components/schemas/User' /collection/{collectionId}: get: summary: Get collection details description: Returns full collection details in a JSON object. tags: - collection parameters: - in: path name: collectionId required: true schema: type: number example: 537982 - in: query name: language schema: type: string example: en responses: '200': description: Collection details content: application/json: schema: $ref: '#/components/schemas/Collection' /service/radarr: get: summary: Get non-sensitive Radarr server list description: Returns a list of Radarr server IDs and names in a JSON object. tags: - service responses: '200': description: Request successful content: application/json: schema: type: array items: $ref: '#/components/schemas/RadarrSettings' /service/radarr/{radarrId}: get: summary: Get Radarr server quality profiles and root folders description: Returns a Radarr server's quality profile and root folder details in a JSON object. tags: - service parameters: - in: path name: radarrId required: true schema: type: number example: 0 responses: '200': description: Request successful content: application/json: schema: type: object properties: server: $ref: '#/components/schemas/RadarrSettings' profiles: $ref: '#/components/schemas/ServiceProfile' /service/sonarr: get: summary: Get non-sensitive Sonarr server list description: Returns a list of Sonarr server IDs and names in a JSON object. tags: - service responses: '200': description: Request successful content: application/json: schema: type: array items: $ref: '#/components/schemas/SonarrSettings' /service/sonarr/{sonarrId}: get: summary: Get Sonarr server quality profiles and root folders description: Returns a Sonarr server's quality profile and root folder details in a JSON object. tags: - service parameters: - in: path name: sonarrId required: true schema: type: number example: 0 responses: '200': description: Request successful content: application/json: schema: type: object properties: server: $ref: '#/components/schemas/SonarrSettings' profiles: $ref: '#/components/schemas/ServiceProfile' /service/sonarr/lookup/{tmdbId}: get: summary: Get series from Sonarr description: Returns a list of series returned by searching for the name in Sonarr. tags: - service parameters: - in: path name: tmdbId required: true schema: type: number example: 0 responses: '200': description: Request successful content: application/json: schema: type: array items: $ref: '#/components/schemas/SonarrSeries' /regions: get: summary: Regions supported by TMDB description: Returns a list of regions in a JSON object. tags: - tmdb responses: '200': description: Results content: application/json: schema: type: array items: type: object properties: iso_3166_1: type: string example: US english_name: type: string example: United States of America /languages: get: summary: Languages supported by TMDB description: Returns a list of languages in a JSON object. tags: - tmdb responses: '200': description: Results content: application/json: schema: type: array items: type: object properties: iso_639_1: type: string example: en english_name: type: string example: English name: type: string example: English /studio/{studioId}: get: summary: Get movie studio details description: Returns movie studio details in a JSON object. tags: - tmdb parameters: - in: path name: studioId required: true schema: type: number example: 2 responses: '200': description: Movie studio details content: application/json: schema: $ref: '#/components/schemas/ProductionCompany' /network/{networkId}: get: summary: Get TV network details description: Returns TV network details in a JSON object. tags: - tmdb parameters: - in: path name: networkId required: true schema: type: number example: 1 responses: '200': description: TV network details content: application/json: schema: $ref: '#/components/schemas/ProductionCompany' /genres/movie: get: summary: Get list of official TMDB movie genres description: Returns a list of genres in a JSON array. tags: - tmdb parameters: - in: query name: language schema: type: string example: en responses: '200': description: Results content: application/json: schema: type: array items: type: object properties: id: type: number example: 10751 name: type: string example: Family /genres/tv: get: summary: Get list of official TMDB movie genres description: Returns a list of genres in a JSON array. tags: - tmdb parameters: - in: query name: language schema: type: string example: en responses: '200': description: Results content: application/json: schema: type: array items: type: object properties: id: type: number example: 18 name: type: string example: Drama /backdrops: get: summary: Get backdrops of trending items description: Returns a list of backdrop image paths in a JSON array. security: [] tags: - tmdb responses: '200': description: Results content: application/json: schema: type: array items: type: string /issue: get: summary: Get all issues description: | Returns a list of issues in JSON format. tags: - issue parameters: - in: query name: take schema: type: number nullable: true example: 20 - in: query name: skip schema: type: number nullable: true example: 0 - in: query name: sort schema: type: string enum: [added, modified] default: added - in: query name: filter schema: type: string enum: [all, open, resolved] default: open - in: query name: requestedBy schema: type: number nullable: true example: 1 responses: '200': description: Issues returned content: application/json: schema: type: object properties: pageInfo: $ref: '#/components/schemas/PageInfo' results: type: array items: $ref: '#/components/schemas/Issue' post: summary: Create new issue description: | Creates a new issue tags: - issue requestBody: required: true content: application/json: schema: type: object properties: issueType: type: number message: type: string mediaId: type: number responses: '201': description: Succesfully created the issue content: application/json: schema: $ref: '#/components/schemas/Issue' /issue/count: get: summary: Gets issue counts description: | Returns the number of open and closed issues, as well as the number of issues of each type. tags: - issue responses: '200': description: Issue counts returned content: application/json: schema: type: object properties: total: type: number video: type: number audio: type: number subtitles: type: number others: type: number open: type: number closed: type: number /issue/{issueId}: get: summary: Get issue description: | Returns a single issue in JSON format. tags: - issue parameters: - in: path name: issueId required: true schema: type: number example: 1 responses: '200': description: Issues returned content: application/json: schema: $ref: '#/components/schemas/Issue' delete: summary: Delete issue description: Removes an issue. If the user has the `MANAGE_ISSUES` permission, any issue can be removed. Otherwise, only a users own issues can be removed. tags: - issue parameters: - in: path name: issueId description: Issue ID required: true example: '1' schema: type: string responses: '204': description: Succesfully removed issue /issue/{issueId}/comment: post: summary: Create a comment description: | Creates a comment and returns associated issue in JSON format. tags: - issue parameters: - in: path name: issueId required: true schema: type: number example: 1 requestBody: required: true content: application/json: schema: type: object properties: message: type: string required: - message responses: '200': description: Issue returned with new comment content: application/json: schema: $ref: '#/components/schemas/Issue' /issueComment/{commentId}: get: summary: Get issue comment description: | Returns a single issue comment in JSON format. tags: - issue parameters: - in: path name: commentId required: true schema: type: string example: 1 responses: '200': description: Comment returned content: application/json: schema: $ref: '#/components/schemas/IssueComment' put: summary: Update issue comment description: | Updates and returns a single issue comment in JSON format. tags: - issue parameters: - in: path name: commentId required: true schema: type: string example: 1 requestBody: required: true content: application/json: schema: type: object properties: message: type: string responses: '200': description: Comment updated content: application/json: schema: $ref: '#/components/schemas/IssueComment' delete: summary: Delete issue comment description: | Deletes an issue comment. Only users with `MANAGE_ISSUES` or the user who created the comment can perform this action. tags: - issue parameters: - in: path name: commentId description: Issue Comment ID required: true example: '1' schema: type: string responses: '204': description: Succesfully removed issue comment /issue/{issueId}/{status}: post: summary: Update an issue's status description: | Updates an issue's status to approved or declined. Also returns the issue in a JSON object. Requires the `MANAGE_ISSUES` permission or `ADMIN`. tags: - issue parameters: - in: path name: issueId description: Issue ID required: true schema: type: string example: '1' - in: path name: status description: New status required: true schema: type: string enum: [open, resolved] responses: '200': description: Issue status changed content: application/json: schema: $ref: '#/components/schemas/Issue' /keyword/{keywordId}: get: summary: Get keyword description: | Returns a single keyword in JSON format. tags: - other parameters: - in: path name: keywordId required: true schema: type: number example: 1 responses: '200': description: Keyword returned (null if not found) content: application/json: schema: nullable: true $ref: '#/components/schemas/Keyword' '500': description: Internal server error content: application/json: schema: type: object properties: message: type: string example: 'Unable to retrieve keyword data.' /watchproviders/regions: get: summary: Get watch provider regions description: | Returns a list of all available watch provider regions. tags: - other responses: '200': description: Watch provider regions returned content: application/json: schema: type: array items: $ref: '#/components/schemas/WatchProviderRegion' /watchproviders/movies: get: summary: Get watch provider movies description: | Returns a list of all available watch providers for movies. tags: - other parameters: - in: query name: watchRegion required: true schema: type: string example: US responses: '200': description: Watch providers for movies returned content: application/json: schema: type: array items: $ref: '#/components/schemas/WatchProviderDetails' /watchproviders/tv: get: summary: Get watch provider series description: | Returns a list of all available watch providers for series. tags: - other parameters: - in: query name: watchRegion required: true schema: type: string example: US responses: '200': description: Watch providers for series returned content: application/json: schema: type: array items: $ref: '#/components/schemas/WatchProviderDetails' /certifications/movie: get: summary: Get movie certifications description: Returns list of movie certifications from TMDB. tags: - other security: - cookieAuth: [] - apiKey: [] responses: '200': description: Movie certifications returned content: application/json: schema: $ref: '#/components/schemas/CertificationResponse' '500': description: Unable to retrieve movie certifications content: application/json: schema: type: object properties: status: type: number example: 500 message: type: string example: Unable to retrieve movie certifications. /certifications/tv: get: summary: Get TV certifications description: Returns list of TV show certifications from TMDB. tags: - other security: - cookieAuth: [] - apiKey: [] responses: '200': description: TV certifications returned content: application/json: schema: $ref: '#/components/schemas/CertificationResponse' '500': description: Unable to retrieve TV certifications content: application/json: schema: type: object properties: status: type: number example: 500 message: type: string example: Unable to retrieve TV certifications. /overrideRule: get: summary: Get override rules description: Returns a list of all override rules with their conditions and settings tags: - overriderule responses: '200': description: Override rules returned content: application/json: schema: type: array items: $ref: '#/components/schemas/OverrideRule' post: summary: Create override rule description: Creates a new Override Rule from the request body. tags: - overriderule responses: '200': description: 'Values were successfully created' content: application/json: schema: type: array items: $ref: '#/components/schemas/OverrideRule' /overrideRule/{ruleId}: put: summary: Update override rule description: Updates an Override Rule from the request body. tags: - overriderule parameters: - in: path name: ruleId required: true schema: type: number responses: '200': description: 'Values were successfully updated' content: application/json: schema: type: array items: $ref: '#/components/schemas/OverrideRule' delete: summary: Delete override rule by ID description: Deletes the override rule with the provided ruleId. tags: - overriderule parameters: - in: path name: ruleId required: true schema: type: number responses: '200': description: Override rule successfully deleted content: application/json: schema: $ref: '#/components/schemas/OverrideRule' security: - cookieAuth: [] - apiKey: []