openapi: '3.0.2' info: title: 'Overseerr API' version: '1.0.0' description: | This is the documentation for the Overseerr 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 Overseerr. tags: - name: public description: Public API endpoints requiring no authentication. - name: settings description: Endpoints related to Overseerr'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. servers: - url: '{server}/api/v1' variables: server: default: http://localhost:5055 components: schemas: User: type: object properties: id: type: integer example: 1 readOnly: true email: type: string example: 'hey@itsme.com' readOnly: true username: type: string plexToken: type: string readOnly: true plexUsername: 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: locale: type: string region: type: string originalLanguage: type: string MainSettings: type: object properties: apiKey: type: string readOnly: true appLanguage: type: string example: en applicationTitle: type: string example: Overseerr applicationUrl: type: string example: https://os.example.com trustProxy: type: boolean example: true csrfProtection: type: boolean example: false hideAvailable: type: boolean example: false partialRequestsEnabled: type: boolean example: false localLogin: type: boolean example: true newPlexLogin: type: boolean example: true defaultPermissions: type: number example: 32 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 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` 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 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 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 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 GotifySettings: type: object properties: enabled: type: boolean example: false types: type: number example: 2 options: type: object properties: url: type: string token: type: string LunaSeaSettings: type: object properties: enabled: type: boolean example: false types: type: number example: 2 options: type: object properties: webhookUrl: type: string profileName: 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: Overseerr 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 telegramEnabled: type: boolean telegramBotUsername: type: string nullable: true telegramChatId: 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 securitySchemes: cookieAuth: type: apiKey name: connect.sid in: cookie apiKey: type: apiKey in: header name: X-Api-Key paths: /status: get: summary: Get Overseerr status description: Returns the current Overseerr 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 /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/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/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/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 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/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/lunasea: get: summary: Get LunaSea notification settings description: Returns current LunaSea notification settings in a JSON object. tags: - settings responses: '200': description: Returned LunaSea settings content: application/json: schema: $ref: '#/components/schemas/LunaSeaSettings' post: summary: Update LunaSea notification settings description: Updates LunaSea notification settings with the provided values. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/LunaSeaSettings' responses: '200': description: 'Values were sucessfully updated' content: application/json: schema: $ref: '#/components/schemas/LunaSeaSettings' /settings/notifications/lunasea/test: post: summary: Test LunaSea settings description: Sends a test notification to the LunaSea agent. tags: - settings requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/LunaSeaSettings' 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/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/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 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/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 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/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 required: - endpoint - auth - p256dh responses: '204': description: Successfully registered 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 /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 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: type: object properties: username: type: string example: 'Mr User' 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: type: object properties: username: type: string nullable: true responses: '200': description: Updated user general settings returned content: application/json: schema: type: object properties: username: type: string example: 'Mr User' /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/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: 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 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: 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 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, ] - in: query name: sort schema: type: string enum: [added, modified] default: added - in: query name: requestedBy schema: type: number nullable: true example: 1 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: 1 - 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 pending and approved 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 /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: 1 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'] /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/{seasonId}: 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: seasonId required: true schema: type: number example: 1 - 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] - 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}/{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] requestBody: content: application/json: schema: type: object properties: is4k: type: boolean example: false 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 content: application/json: schema: $ref: '#/components/schemas/Keyword' /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' security: - cookieAuth: [] - apiKey: []