{"openapi":"3.1.0","info":{"title":"Bazarr API","description":"Subtitle management and automation for Sonarr/Radarr","version":"v1","contact":{"name":"Bazarr","url":"https://www.bazarr.media/"},"license":{"name":"GPL-3.0","url":"https://github.com/morpheus65535/bazarr/blob/master/LICENSE"}},"servers":[{"url":"https://bazarr.haiven.site/api","description":"Haiven local HTTPS endpoint"},{"url":"http://bazarr:6767/api","description":"Docker internal endpoint"}],"tags":[{"name":"Series","description":"TV series management"},{"name":"Movies","description":"Movie management"},{"name":"Episodes","description":"Episode metadata"},{"name":"Subtitles","description":"Subtitle operations and synchronization"},{"name":"Providers","description":"Subtitle provider management"},{"name":"System","description":"System control"},{"name":"Badges","description":"UI badge counts"},{"name":"Webhooks","description":"Webhook integrations"}],"paths":{"/series":{"get":{"tags":["Series"],"summary":"List series metadata","description":"Retrieve metadata for specific TV series or all series with pagination","operationId":"getSeries","parameters":[{"name":"start","in":"query","description":"Paging start position","required":false,"schema":{"type":"integer","default":0}},{"name":"length","in":"query","description":"Paging length (-1 for all)","required":false,"schema":{"type":"integer","default":-1}},{"name":"seriesid[]","in":"query","description":"Series IDs to retrieve (can be repeated)","required":false,"schema":{"type":"array","items":{"type":"integer"}},"style":"form","explode":true}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Series"}},"total":{"type":"integer","description":"Total number of series"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Series"],"summary":"Update series language profiles","description":"Modify language profile settings for one or more series","operationId":"updateSeriesProfiles","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"seriesid":{"type":"array","items":{"type":"integer"},"description":"Sonarr series IDs"},"profileid":{"type":"array","items":{"type":"string"},"description":"Language profile IDs or \"none\""}},"required":["seriesid","profileid"]}}}},"responses":{"204":{"description":"Success (no content)"},"401":{"$ref":"#/components/responses/Unauthorized"}}},"patch":{"tags":["Series"],"summary":"Execute series action","description":"Perform various actions on a specific series","operationId":"executeSeriesAction","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"seriesid":{"type":"integer","description":"Sonarr series ID"},"action":{"type":"string","enum":["scan-disk","search-missing","search-wanted","sync"],"description":"Action to perform"}},"required":["seriesid","action"]}}}},"responses":{"204":{"description":"Success (no content)"},"400":{"description":"Unknown action"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/movies":{"get":{"tags":["Movies"],"summary":"List movies metadata","description":"Retrieve metadata for specific movies or all movies with pagination","operationId":"getMovies","parameters":[{"name":"start","in":"query","description":"Paging start position","required":false,"schema":{"type":"integer","default":0}},{"name":"length","in":"query","description":"Paging length (-1 for all)","required":false,"schema":{"type":"integer","default":-1}},{"name":"radarrid[]","in":"query","description":"Movie IDs to retrieve (can be repeated)","required":false,"schema":{"type":"array","items":{"type":"integer"}},"style":"form","explode":true}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Movie"}},"total":{"type":"integer","description":"Total number of movies"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Movies"],"summary":"Update movie language profiles","description":"Modify language profile settings for one or more movies","operationId":"updateMovieProfiles","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"radarrid":{"type":"array","items":{"type":"integer"},"description":"Radarr movie IDs"},"profileid":{"type":"array","items":{"type":"string"},"description":"Language profile IDs or \"none\""}},"required":["radarrid","profileid"]}}}},"responses":{"204":{"description":"Success (no content)"},"404":{"description":"Profile not found"},"401":{"$ref":"#/components/responses/Unauthorized"}}},"patch":{"tags":["Movies"],"summary":"Execute movie action","description":"Perform various actions on a specific movie","operationId":"executeMovieAction","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"radarrid":{"type":"integer","description":"Radarr movie ID"},"action":{"type":"string","enum":["scan-disk","search-missing","search-wanted","sync"],"description":"Action to perform"}},"required":["radarrid","action"]}}}},"responses":{"204":{"description":"Success (no content)"},"400":{"description":"Unknown action"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/episodes":{"get":{"tags":["Episodes"],"summary":"List episodes metadata","description":"Retrieve metadata for episodes by series ID or specific episode IDs","operationId":"getEpisodes","parameters":[{"name":"seriesid[]","in":"query","description":"Series IDs to list episodes for","required":false,"schema":{"type":"array","items":{"type":"integer"}},"style":"form","explode":true},{"name":"episodeid[]","in":"query","description":"Specific episode IDs to retrieve","required":false,"schema":{"type":"array","items":{"type":"integer"}},"style":"form","explode":true}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Episode"}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Series or Episode ID not provided"}}}},"/subtitles":{"get":{"tags":["Subtitles"],"summary":"Get subtitle tracks","description":"Retrieve audio and subtitle track information for a media file","operationId":"getSubtitles","parameters":[{"name":"subtitlesPath","in":"query","description":"External subtitles file path","required":true,"schema":{"type":"string"}},{"name":"sonarrEpisodeId","in":"query","description":"Sonarr Episode ID","required":false,"schema":{"type":"integer"}},{"name":"radarrMovieId","in":"query","description":"Radarr Movie ID","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubtitleTracks"}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"patch":{"tags":["Subtitles"],"summary":"Modify subtitle file","description":"Sync, translate, or apply modifications to subtitle files","operationId":"modifySubtitle","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"Action type (sync, translate, or mods name)"},"language":{"type":"string","description":"Language code (2-character)","pattern":"^[a-z]{2}$"},"path":{"type":"string","description":"Subtitles file path"},"type":{"type":"string","enum":["episode","movie"],"description":"Media type"},"id":{"type":"integer","description":"Media ID (episodeId or radarrId)"},"forced":{"type":"string","enum":["True","False"],"description":"Forced subtitle flag"},"hi":{"type":"string","enum":["True","False"],"description":"Hearing impaired flag"},"original_format":{"type":"string","enum":["True","False"],"description":"Keep original format"},"reference":{"type":"string","description":"Video track number or subtitles file path for sync reference"},"max_offset_seconds":{"type":"string","description":"Maximum offset in seconds for sync"},"no_fix_framerate":{"type":"string","enum":["True","False"],"description":"Disable framerate fix"},"gss":{"type":"string","enum":["True","False"],"description":"Golden section search"}},"required":["action","language","path","type","id"]}}}},"responses":{"204":{"description":"Success (no content)"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Episode or movie not found"},"409":{"description":"Unable to edit subtitle"},"500":{"description":"File not found"}}}},"/providers":{"get":{"tags":["Providers"],"summary":"Get providers status","description":"Retrieve subtitle provider status and throttling information","operationId":"getProviders","parameters":[{"name":"history","in":"query","description":"Provider name for history stats","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Provider"}}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Providers"],"summary":"Reset providers status","description":"Reset throttled subtitle providers","operationId":"resetProviders","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["reset"],"description":"Action to perform"}},"required":["action"]}}}},"responses":{"204":{"description":"Success (no content)"},"400":{"description":"Unknown action"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/badges":{"get":{"tags":["Badges"],"summary":"Get UI badge counts","description":"Retrieve counts for various UI badges (missing subtitles, providers, etc.)","operationId":"getBadges","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Badges"}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/system":{"post":{"tags":["System"],"summary":"Control system","description":"Shutdown or restart the Bazarr application","operationId":"controlSystem","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["shutdown","restart"],"description":"System action to perform"}},"required":["action"]}}}},"responses":{"204":{"description":"Success (no content)"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/webhooks/plex":{"post":{"tags":["Webhooks"],"summary":"Plex webhook endpoint","description":"Receive webhook notifications from Plex Media Server","operationId":"plexWebhook","parameters":[{"name":"apikey","in":"query","description":"Bazarr API key","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Plex webhook payload"}}}},"responses":{"200":{"description":"Webhook processed"},"401":{"$ref":"#/components/responses/Unauthorized"}}}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"API key found in Settings > General > Security"}},"schemas":{"Series":{"type":"object","properties":{"tvdbId":{"type":"integer","description":"TVDB series ID"},"alternativeTitles":{"type":"array","items":{"type":"string"},"description":"Alternative titles for the series"},"audio_language":{"$ref":"#/components/schemas/AudioLanguage"},"fanart":{"type":"string","description":"Fanart image URL"},"imdbId":{"type":"string","description":"IMDb ID"},"monitored":{"type":"boolean","description":"Whether the series is monitored"},"overview":{"type":"string","description":"Series overview/plot"},"path":{"type":"string","description":"File system path to series"},"poster":{"type":"string","description":"Poster image URL"},"profileId":{"type":"integer","description":"Language profile ID"},"seriesType":{"type":"string","description":"Type of series (standard, daily, anime, etc.)"},"sonarrSeriesId":{"type":"integer","description":"Sonarr series ID"},"tags":{"type":"array","items":{"type":"string"},"description":"Series tags"},"title":{"type":"string","description":"Series title"},"year":{"type":"string","description":"Release year"},"ended":{"type":"boolean","description":"Whether the series has ended"},"lastAired":{"type":"string","format":"date-time","description":"Last air date"},"episodeFileCount":{"type":"integer","description":"Number of episode files"},"episodeMissingCount":{"type":"integer","description":"Number of episodes with missing subtitles"}}},"Movie":{"type":"object","properties":{"radarrId":{"type":"integer","description":"Radarr movie ID"},"alternativeTitles":{"type":"array","items":{"type":"string"},"description":"Alternative titles"},"audio_language":{"$ref":"#/components/schemas/AudioLanguage"},"fanart":{"type":"string","description":"Fanart image URL"},"imdbId":{"type":"string","description":"IMDb ID"},"missing_subtitles":{"$ref":"#/components/schemas/SubtitlesLanguage"},"monitored":{"type":"boolean","description":"Whether the movie is monitored"},"overview":{"type":"string","description":"Movie overview/plot"},"path":{"type":"string","description":"File system path to movie"},"poster":{"type":"string","description":"Poster image URL"},"profileId":{"type":"integer","description":"Language profile ID"},"sceneName":{"type":"string","description":"Scene release name"},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"tags":{"type":"array","items":{"type":"string"},"description":"Movie tags"},"title":{"type":"string","description":"Movie title"},"year":{"type":"string","description":"Release year"}}},"Episode":{"type":"object","properties":{"sonarrEpisodeId":{"type":"integer","description":"Sonarr episode ID"},"sonarrSeriesId":{"type":"integer","description":"Sonarr series ID"},"audio_language":{"$ref":"#/components/schemas/AudioLanguage"},"episode":{"type":"integer","description":"Episode number"},"season":{"type":"integer","description":"Season number"},"missing_subtitles":{"$ref":"#/components/schemas/SubtitlesLanguage"},"monitored":{"type":"boolean","description":"Whether the episode is monitored"},"path":{"type":"string","description":"File system path to episode"},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"title":{"type":"string","description":"Episode title"},"sceneName":{"type":"string","description":"Scene release name"}}},"Subtitles":{"type":"object","properties":{"name":{"type":"string","description":"Subtitle file name"},"code2":{"type":"string","description":"Language code (2-character)"},"code3":{"type":"string","description":"Language code (3-character)"},"path":{"type":"string","description":"File path to subtitle"},"forced":{"type":"boolean","description":"Forced subtitle flag"},"hi":{"type":"boolean","description":"Hearing impaired flag"},"size":{"type":"integer","description":"File size in bytes"}}},"SubtitlesLanguage":{"type":"object","properties":{"name":{"type":"string","description":"Language name"},"code2":{"type":"string","description":"Language code (2-character)"},"code3":{"type":"string","description":"Language code (3-character)"},"forced":{"type":"boolean","description":"Forced subtitle flag"},"hi":{"type":"boolean","description":"Hearing impaired flag"}}},"AudioLanguage":{"type":"object","properties":{"name":{"type":"string","description":"Language name"},"code2":{"type":"string","description":"Language code (2-character)"},"code3":{"type":"string","description":"Language code (3-character)"}}},"SubtitleTracks":{"type":"object","properties":{"data":{"type":"object","properties":{"audio_tracks":{"type":"array","items":{"type":"object","properties":{"stream":{"type":"string","description":"Stream identifier"},"name":{"type":"string","description":"Track name"},"language":{"type":"string","description":"Language code"}}}},"embedded_subtitles_tracks":{"type":"array","items":{"type":"object","properties":{"stream":{"type":"string","description":"Stream identifier"},"name":{"type":"string","description":"Track name"},"language":{"type":"string","description":"Language code"},"forced":{"type":"boolean","description":"Forced subtitle flag"},"hearing_impaired":{"type":"boolean","description":"Hearing impaired flag"}}}},"external_subtitles_tracks":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Track name"},"path":{"type":"string","description":"File path"},"language":{"type":"string","description":"Language code"},"forced":{"type":"boolean","description":"Forced subtitle flag"},"hearing_impaired":{"type":"boolean","description":"Hearing impaired flag"}}}}}}}},"Provider":{"type":"object","properties":{"name":{"type":"string","description":"Provider name"},"status":{"type":"string","description":"Provider status (active, throttled, etc.)"},"retry":{"type":"string","description":"Retry timestamp if throttled"}}},"Badges":{"type":"object","properties":{"episodes":{"type":"integer","description":"Count of episodes with missing subtitles"},"movies":{"type":"integer","description":"Count of movies with missing subtitles"},"providers":{"type":"integer","description":"Count of throttled providers"},"status":{"type":"integer","description":"Count of health issues"},"sonarr_signalr":{"type":"string","description":"Sonarr SignalR connection status"},"radarr_signalr":{"type":"string","description":"Radarr SignalR connection status"},"announcements":{"type":"integer","description":"Count of unread announcements"}}}},"responses":{"Unauthorized":{"description":"Not Authenticated - Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Invalid API key"}}}}}}}},"security":[{"ApiKeyAuth":[]}]}