Full Code of holgerbrandl/themoviedbapi for AI

master eab76bc7182d cached
452 files
4.2 MB
1.1M tokens
837 symbols
1 requests
Download .txt
Showing preview only (4,533K chars total). Download the full file or copy to clipboard to get everything.
Repository: holgerbrandl/themoviedbapi
Branch: master
Commit: eab76bc7182d
Files: 452
Total size: 4.2 MB

Directory structure:
gitextract_z5gux3ao/

├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   └── bug_report.md
│   ├── dependabot.yml
│   └── workflows/
│       └── gradle.yml
├── .gitignore
├── LICENCE.txt
├── README.md
├── build.gradle.kts
├── config/
│   └── checkstyle/
│       ├── checkstyle.xml
│       └── suppressions.xml
├── devel_notes.md
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── lombok.config
├── settings.gradle.kts
└── src/
    ├── main/
    │   └── java/
    │       ├── info/
    │       │   └── movito/
    │       │       └── themoviedbapi/
    │       │           ├── AbstractTmdbApi.java
    │       │           ├── TmdbAccount.java
    │       │           ├── TmdbApi.java
    │       │           ├── TmdbAuthentication.java
    │       │           ├── TmdbCertifications.java
    │       │           ├── TmdbChanges.java
    │       │           ├── TmdbCollections.java
    │       │           ├── TmdbCompanies.java
    │       │           ├── TmdbConfiguration.java
    │       │           ├── TmdbDiscover.java
    │       │           ├── TmdbFind.java
    │       │           ├── TmdbGenre.java
    │       │           ├── TmdbGuestSessions.java
    │       │           ├── TmdbKeywords.java
    │       │           ├── TmdbLists.java
    │       │           ├── TmdbMovieLists.java
    │       │           ├── TmdbMovies.java
    │       │           ├── TmdbNetworks.java
    │       │           ├── TmdbPeople.java
    │       │           ├── TmdbPeopleLists.java
    │       │           ├── TmdbReviews.java
    │       │           ├── TmdbSearch.java
    │       │           ├── TmdbTrending.java
    │       │           ├── TmdbTvEpisodeGroups.java
    │       │           ├── TmdbTvEpisodes.java
    │       │           ├── TmdbTvSeasons.java
    │       │           ├── TmdbTvSeries.java
    │       │           ├── TmdbTvSeriesLists.java
    │       │           ├── TmdbWatchProviders.java
    │       │           ├── model/
    │       │           │   ├── account/
    │       │           │   │   ├── Account.java
    │       │           │   │   └── Avatar.java
    │       │           │   ├── authentication/
    │       │           │   │   ├── GuestSession.java
    │       │           │   │   ├── RequestToken.java
    │       │           │   │   └── Session.java
    │       │           │   ├── certifications/
    │       │           │   │   ├── Certification.java
    │       │           │   │   └── CertificationResults.java
    │       │           │   ├── changes/
    │       │           │   │   ├── Change.java
    │       │           │   │   └── ChangesResultsPage.java
    │       │           │   ├── collections/
    │       │           │   │   ├── CollectionInfo.java
    │       │           │   │   ├── Data.java
    │       │           │   │   ├── Images.java
    │       │           │   │   ├── Part.java
    │       │           │   │   ├── Translation.java
    │       │           │   │   └── Translations.java
    │       │           │   ├── companies/
    │       │           │   │   ├── AlternativeNamesResultsPage.java
    │       │           │   │   └── Company.java
    │       │           │   ├── configuration/
    │       │           │   │   ├── Configuration.java
    │       │           │   │   ├── Country.java
    │       │           │   │   ├── ImageConfig.java
    │       │           │   │   ├── Job.java
    │       │           │   │   └── Timezone.java
    │       │           │   ├── core/
    │       │           │   │   ├── AbstractJsonMapping.java
    │       │           │   │   ├── AccountStates.java
    │       │           │   │   ├── AlternativeName.java
    │       │           │   │   ├── AlternativeTitle.java
    │       │           │   │   ├── Genre.java
    │       │           │   │   ├── Genres.java
    │       │           │   │   ├── IdElement.java
    │       │           │   │   ├── Language.java
    │       │           │   │   ├── Movie.java
    │       │           │   │   ├── MovieDbResultsPage.java
    │       │           │   │   ├── MovieResultsPage.java
    │       │           │   │   ├── NamedElement.java
    │       │           │   │   ├── NamedIdElement.java
    │       │           │   │   ├── NamedStringIdElement.java
    │       │           │   │   ├── ProductionCompany.java
    │       │           │   │   ├── ProductionCountry.java
    │       │           │   │   ├── Results.java
    │       │           │   │   ├── ResultsPage.java
    │       │           │   │   ├── Review.java
    │       │           │   │   ├── ReviewResultsPage.java
    │       │           │   │   ├── StringIdElement.java
    │       │           │   │   ├── TvKeywords.java
    │       │           │   │   ├── TvSeries.java
    │       │           │   │   ├── TvSeriesResultsPage.java
    │       │           │   │   ├── image/
    │       │           │   │   │   ├── Artwork.java
    │       │           │   │   │   ├── Image.java
    │       │           │   │   │   └── ImageResults.java
    │       │           │   │   ├── multi/
    │       │           │   │   │   ├── Multi.java
    │       │           │   │   │   ├── MultiMovie.java
    │       │           │   │   │   ├── MultiPerson.java
    │       │           │   │   │   ├── MultiResultsPage.java
    │       │           │   │   │   └── MultiTvSeries.java
    │       │           │   │   ├── popularperson/
    │       │           │   │   │   ├── KnownFor.java
    │       │           │   │   │   ├── PopularPerson.java
    │       │           │   │   │   └── PopularPersonResultsPage.java
    │       │           │   │   ├── responses/
    │       │           │   │   │   ├── ResponseStatus.java
    │       │           │   │   │   ├── ResponseStatusAuthentication.java
    │       │           │   │   │   ├── ResponseStatusDelete.java
    │       │           │   │   │   └── TmdbResponseException.java
    │       │           │   │   ├── video/
    │       │           │   │   │   ├── Video.java
    │       │           │   │   │   └── VideoResults.java
    │       │           │   │   └── watchproviders/
    │       │           │   │       ├── Provider.java
    │       │           │   │       ├── ProviderResults.java
    │       │           │   │       └── WatchProviders.java
    │       │           │   ├── find/
    │       │           │   │   ├── FindMovie.java
    │       │           │   │   ├── FindPerson.java
    │       │           │   │   ├── FindResults.java
    │       │           │   │   ├── FindTvEpisode.java
    │       │           │   │   ├── FindTvSeason.java
    │       │           │   │   └── FindTvSeries.java
    │       │           │   ├── keywords/
    │       │           │   │   └── Keyword.java
    │       │           │   ├── lists/
    │       │           │   │   ├── ListDetails.java
    │       │           │   │   ├── ListItemStatus.java
    │       │           │   │   └── MovieListCreationStatus.java
    │       │           │   ├── movielists/
    │       │           │   │   ├── Dates.java
    │       │           │   │   └── MovieResultsPageWithDates.java
    │       │           │   ├── movies/
    │       │           │   │   ├── AlternativeTitles.java
    │       │           │   │   ├── BelongsToCollection.java
    │       │           │   │   ├── Cast.java
    │       │           │   │   ├── Credits.java
    │       │           │   │   ├── Crew.java
    │       │           │   │   ├── Data.java
    │       │           │   │   ├── ExternalIds.java
    │       │           │   │   ├── Images.java
    │       │           │   │   ├── KeywordResults.java
    │       │           │   │   ├── MovieDb.java
    │       │           │   │   ├── MovieList.java
    │       │           │   │   ├── MovieListResultsPage.java
    │       │           │   │   ├── ReleaseDate.java
    │       │           │   │   ├── ReleaseDateResults.java
    │       │           │   │   ├── ReleaseInfo.java
    │       │           │   │   ├── ReleaseType.java
    │       │           │   │   ├── Translation.java
    │       │           │   │   ├── Translations.java
    │       │           │   │   └── changes/
    │       │           │   │       ├── Change.java
    │       │           │   │       ├── ChangeItem.java
    │       │           │   │       └── ChangeResults.java
    │       │           │   ├── networks/
    │       │           │   │   ├── AlternativeNamesResults.java
    │       │           │   │   └── Network.java
    │       │           │   ├── people/
    │       │           │   │   ├── Data.java
    │       │           │   │   ├── ExternalIds.java
    │       │           │   │   ├── Gender.java
    │       │           │   │   ├── PersonDb.java
    │       │           │   │   ├── PersonImages.java
    │       │           │   │   ├── Translation.java
    │       │           │   │   ├── Translations.java
    │       │           │   │   └── credits/
    │       │           │   │       ├── Cast.java
    │       │           │   │       ├── CombinedPersonCredits.java
    │       │           │   │       ├── Crew.java
    │       │           │   │       ├── MediaType.java
    │       │           │   │       ├── MovieCast.java
    │       │           │   │       ├── MovieCredits.java
    │       │           │   │       ├── MovieCrew.java
    │       │           │   │       ├── TvCast.java
    │       │           │   │       ├── TvCredits.java
    │       │           │   │       └── TvCrew.java
    │       │           │   ├── rated/
    │       │           │   │   ├── RatedMovie.java
    │       │           │   │   ├── RatedMovieResultsPage.java
    │       │           │   │   ├── RatedTvEpisode.java
    │       │           │   │   ├── RatedTvEpisodeResultsPage.java
    │       │           │   │   ├── RatedTvSeries.java
    │       │           │   │   └── RatedTvSeriesResultsPage.java
    │       │           │   ├── reviews/
    │       │           │   │   ├── AuthorDetails.java
    │       │           │   │   └── Review.java
    │       │           │   ├── search/
    │       │           │   │   ├── Collection.java
    │       │           │   │   ├── CollectionResultsPage.java
    │       │           │   │   ├── Company.java
    │       │           │   │   ├── CompanyResultsPage.java
    │       │           │   │   └── KeywordResultsPage.java
    │       │           │   ├── tv/
    │       │           │   │   ├── core/
    │       │           │   │   │   ├── Change.java
    │       │           │   │   │   ├── ChangeItem.java
    │       │           │   │   │   ├── ChangeResults.java
    │       │           │   │   │   ├── Data.java
    │       │           │   │   │   ├── Network.java
    │       │           │   │   │   ├── Translation.java
    │       │           │   │   │   ├── Translations.java
    │       │           │   │   │   ├── TvEpisode.java
    │       │           │   │   │   ├── TvSeason.java
    │       │           │   │   │   └── credits/
    │       │           │   │   │       ├── AggregateCast.java
    │       │           │   │   │       ├── AggregateCredits.java
    │       │           │   │   │       ├── AggregateCrew.java
    │       │           │   │   │       ├── Cast.java
    │       │           │   │   │       ├── Credits.java
    │       │           │   │   │       └── Crew.java
    │       │           │   │   ├── episode/
    │       │           │   │   │   ├── EpisodeCredits.java
    │       │           │   │   │   ├── ExternalIds.java
    │       │           │   │   │   ├── GuestStar.java
    │       │           │   │   │   ├── Images.java
    │       │           │   │   │   └── TvEpisodeDb.java
    │       │           │   │   ├── episodegroups/
    │       │           │   │   │   ├── EpisodeGroupType.java
    │       │           │   │   │   ├── OrderedTvEpisode.java
    │       │           │   │   │   ├── TvEpisodeGroup.java
    │       │           │   │   │   └── TvEpisodeGroups.java
    │       │           │   │   ├── season/
    │       │           │   │   │   ├── AccountState.java
    │       │           │   │   │   ├── AccountStateResults.java
    │       │           │   │   │   ├── Change.java
    │       │           │   │   │   ├── ChangeItem.java
    │       │           │   │   │   ├── ChangeResults.java
    │       │           │   │   │   ├── ExternalIds.java
    │       │           │   │   │   ├── Images.java
    │       │           │   │   │   ├── TvSeasonDb.java
    │       │           │   │   │   └── TvSeasonEpisode.java
    │       │           │   │   └── series/
    │       │           │   │       ├── AlternativeTitleResults.java
    │       │           │   │       ├── ContentRating.java
    │       │           │   │       ├── ContentRatingResults.java
    │       │           │   │       ├── CreatedBy.java
    │       │           │   │       ├── Data.java
    │       │           │   │       ├── EpisodeGroup.java
    │       │           │   │       ├── EpisodeGroupResults.java
    │       │           │   │       ├── ExternalIds.java
    │       │           │   │       ├── Images.java
    │       │           │   │       ├── Job.java
    │       │           │   │       ├── Role.java
    │       │           │   │       ├── ScreenedTheatrically.java
    │       │           │   │       ├── ScreenedTheatricallyResults.java
    │       │           │   │       ├── Translation.java
    │       │           │   │       ├── Translations.java
    │       │           │   │       ├── TvSeriesDb.java
    │       │           │   │       ├── TvSeriesList.java
    │       │           │   │       └── TvSeriesListResultsPage.java
    │       │           │   └── watchproviders/
    │       │           │       ├── AvailableRegion.java
    │       │           │       ├── AvailableRegionResults.java
    │       │           │       ├── Provider.java
    │       │           │       └── ProviderResults.java
    │       │           ├── tools/
    │       │           │   ├── ApiUrl.java
    │       │           │   ├── RequestType.java
    │       │           │   ├── TmdbException.java
    │       │           │   ├── TmdbHttpClient.java
    │       │           │   ├── TmdbResponseCode.java
    │       │           │   ├── TmdbUrlReader.java
    │       │           │   ├── appendtoresponse/
    │       │           │   │   ├── AppendToResponse.java
    │       │           │   │   ├── MovieAppendToResponse.java
    │       │           │   │   ├── PersonAppendToResponse.java
    │       │           │   │   ├── TvEpisodesAppendToResponse.java
    │       │           │   │   ├── TvSeasonsAppendToResponse.java
    │       │           │   │   └── TvSeriesAppendToResponse.java
    │       │           │   ├── builders/
    │       │           │   │   ├── ParamBuilder.java
    │       │           │   │   └── discover/
    │       │           │   │       ├── DiscoverMovieParamBuilder.java
    │       │           │   │       ├── DiscoverParamBuilder.java
    │       │           │   │       └── DiscoverTvParamBuilder.java
    │       │           │   ├── model/
    │       │           │   │   └── time/
    │       │           │   │       ├── ExternalSource.java
    │       │           │   │       └── TimeWindow.java
    │       │           │   └── sortby/
    │       │           │       ├── AccountSortBy.java
    │       │           │       ├── DiscoverMovieSortBy.java
    │       │           │       ├── DiscoverTvSortBy.java
    │       │           │       └── SortBy.java
    │       │           └── util/
    │       │               ├── JsonUtil.java
    │       │               └── ModelUtil.java
    │       └── module-info.java
    └── test/
        ├── java/
        │   └── info/
        │       └── movito/
        │           └── themoviedbapi/
        │               ├── AbstractTmdbApiTest.java
        │               ├── TmdbAccountTest.java
        │               ├── TmdbAuthenticationTest.java
        │               ├── TmdbCertificationsTest.java
        │               ├── TmdbChangesTest.java
        │               ├── TmdbCollectionsTest.java
        │               ├── TmdbCompaniesTest.java
        │               ├── TmdbConfigurationTest.java
        │               ├── TmdbDiscoverTest.java
        │               ├── TmdbFindTest.java
        │               ├── TmdbGenresTest.java
        │               ├── TmdbGuestSessionsTest.java
        │               ├── TmdbKeywordsTest.java
        │               ├── TmdbListsTest.java
        │               ├── TmdbMovieListsTest.java
        │               ├── TmdbMoviesTest.java
        │               ├── TmdbNetworksTest.java
        │               ├── TmdbPeopleListsTest.java
        │               ├── TmdbPeopleTest.java
        │               ├── TmdbReviewsTest.java
        │               ├── TmdbTrendingTest.java
        │               ├── TmdbTvEpisodeGroupsTest.java
        │               ├── TmdbTvEpisodesTest.java
        │               ├── TmdbTvSearchTest.java
        │               ├── TmdbTvSeasonsTest.java
        │               ├── TmdbTvSeriesListsTest.java
        │               ├── TmdbTvSeriesTest.java
        │               ├── TmdbWatchProvidersTest.java
        │               ├── testutil/
        │               │   ├── AbstractJsonMappingValidator.java
        │               │   ├── TestUtils.java
        │               │   └── ValidatorConfig.java
        │               └── util/
        │                   ├── JsonUtilTest.java
        │                   └── ModelUtilTest.java
        └── resources/
            └── api_responses/
                ├── account/
                │   ├── add_favourite.json
                │   ├── add_to_watchlist.json
                │   ├── details.json
                │   ├── favourite_movies.json
                │   ├── favourite_tv.json
                │   ├── lists.json
                │   ├── rated_movies.json
                │   ├── rated_tv.json
                │   ├── rated_tv_episodes.json
                │   ├── watchlist_movies.json
                │   └── watchlist_tv.json
                ├── authentication/
                │   ├── create_guest_session.json
                │   ├── create_request_token.json
                │   ├── create_request_token_unsuccessful.json
                │   ├── create_session.json
                │   ├── create_session_with_login.json
                │   ├── create_session_with_login_unsuccessful.json
                │   ├── delete_session.json
                │   ├── validate_key.json
                │   └── validate_key_unsuccessful.json
                ├── certifications/
                │   ├── movie.json
                │   └── tv.json
                ├── changes/
                │   ├── movie_list.json
                │   ├── people_list.json
                │   └── tv_list.json
                ├── collections/
                │   ├── details.json
                │   ├── images.json
                │   └── translations.json
                ├── companies/
                │   ├── alternative_names.json
                │   ├── details.json
                │   └── images.json
                ├── configuration/
                │   ├── countries.json
                │   ├── details.json
                │   ├── jobs.json
                │   ├── languages.json
                │   ├── primary_translations.json
                │   └── timezones.json
                ├── discover/
                │   ├── movies.json
                │   └── tv.json
                ├── find/
                │   ├── movie_results.json
                │   ├── person_results.json
                │   ├── tv_episode_results.json
                │   ├── tv_results.json
                │   └── tv_season_results.json
                ├── genres/
                │   ├── movie_list.json
                │   └── tv_list.json
                ├── guest_sessions/
                │   ├── rated_movies.json
                │   ├── rated_tv.json
                │   └── rated_tv_episodes.json
                ├── keywords/
                │   └── details.json
                ├── lists/
                │   ├── add_movie.json
                │   ├── check_item_status.json
                │   ├── clear.json
                │   ├── create.json
                │   ├── delete.json
                │   ├── details.json
                │   └── remove_movie.json
                ├── movie_lists/
                │   ├── now_playing.json
                │   ├── popular.json
                │   ├── top_rated.json
                │   └── upcoming.json
                ├── movies/
                │   ├── account_states.json
                │   ├── add_rating.json
                │   ├── alternative_titles.json
                │   ├── changes.json
                │   ├── credits.json
                │   ├── delete_rating.json
                │   ├── details.json
                │   ├── details_with_append_to_response.json
                │   ├── external_ids.json
                │   ├── images.json
                │   ├── keywords.json
                │   ├── latest.json
                │   ├── lists.json
                │   ├── recommendations.json
                │   ├── release_dates.json
                │   ├── reviews.json
                │   ├── similar.json
                │   ├── translations.json
                │   ├── videos.json
                │   └── watch_providers.json
                ├── networks/
                │   ├── alternative_names.json
                │   ├── details.json
                │   └── images.json
                ├── people/
                │   ├── changes.json
                │   ├── combined_credits.json
                │   ├── details.json
                │   ├── details_with_append_to_response.json
                │   ├── external_ids.json
                │   ├── images.json
                │   ├── latest.json
                │   ├── movie_credits.json
                │   ├── translations.json
                │   └── tv_credits.json
                ├── people_lists/
                │   └── popular.json
                ├── reviews/
                │   └── details.json
                ├── search/
                │   ├── collection.json
                │   ├── company.json
                │   ├── keyword.json
                │   ├── movie.json
                │   ├── multi.json
                │   ├── person.json
                │   └── tv.json
                ├── trending/
                │   ├── all.json
                │   ├── movies.json
                │   ├── people.json
                │   └── tv.json
                ├── tv_episode_groups/
                │   └── details.json
                ├── tv_episodes/
                │   ├── account_states.json
                │   ├── add_rating.json
                │   ├── changes.json
                │   ├── credits.json
                │   ├── delete_rating.json
                │   ├── details.json
                │   ├── details_with_append_to_response.json
                │   ├── external_ids.json
                │   ├── images.json
                │   ├── translations.json
                │   └── videos.json
                ├── tv_seasons/
                │   ├── account_states.json
                │   ├── aggregate_credits.json
                │   ├── changes.json
                │   ├── credits.json
                │   ├── details.json
                │   ├── details_with_append_to_response.json
                │   ├── external_ids.json
                │   ├── images.json
                │   ├── translations.json
                │   ├── videos.json
                │   └── watch_providers.json
                ├── tv_series/
                │   ├── account_states.json
                │   ├── add_rating.json
                │   ├── aggregate_credits.json
                │   ├── alternative_titles.json
                │   ├── changes.json
                │   ├── content_ratings.json
                │   ├── credits.json
                │   ├── delete_rating.json
                │   ├── details.json
                │   ├── details_with_append_to_response.json
                │   ├── episode_groups.json
                │   ├── external_ids.json
                │   ├── images.json
                │   ├── keywords.json
                │   ├── latest.json
                │   ├── lists.json
                │   ├── recommendations.json
                │   ├── reviews.json
                │   ├── screened_theatrically.json
                │   ├── similar.json
                │   ├── translations.json
                │   ├── videos.json
                │   └── watch_providers.json
                ├── tv_series_lists/
                │   ├── airing_today.json
                │   ├── on_the_air.json
                │   ├── popular.json
                │   └── top_rated.json
                └── watch_providers/
                    ├── available_regions.json
                    ├── empty_watch_providers.json
                    ├── movie_providers.json
                    └── tv_providers.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
* text=auto

# Custom for Visual Studio
*.cs     diff=csharp
*.sln    merge=union
*.csproj merge=union
*.vbproj merge=union
*.fsproj merge=union
*.dbproj merge=union

# Standard to msysgit
*.doc	 diff=astextplain
*.DOC	 diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot  diff=astextplain
*.DOT  diff=astextplain
*.pdf  diff=astextplain
*.PDF	 diff=astextplain
*.rtf	 diff=astextplain
*.RTF	 diff=astextplain


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us fix an issue
title: "[BUG]"
labels: bug
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**State what version of themoviedbapi you are using**
e.g. 2.3.1.

**Provide a code snippet to replicate the bug**
code goes here

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

version: 2
updates:
  - package-ecosystem: "gradle"
    directory: "/" # Location of package manifests
    schedule:
      interval: "monthly"

  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "monthly"



================================================
FILE: .github/workflows/gradle.yml
================================================
name: build

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v6

      - name: Setup Java
        uses: actions/setup-java@v5
        with:
          java-version: 17
          distribution: corretto

      - name: Setup Gradle
        uses: gradle/actions/setup-gradle@v5

      - name: Execute Gradle Build
        run: ./gradlew clean build --scan


================================================
FILE: .gitignore
================================================
*.class

# Package Files #
*.jar
*.war
*.ear

/target/
/nbactions.xml

.classpath
.project
.idea/
.settings/
*.iml
/bin/

# sonatype credentials
local.properties
*.gpg

build
.gradle
!/gradle/wrapper/gradle-wrapper.jar


================================================
FILE: LICENCE.txt
================================================
Copyright (c) 2026, Holger Brandl, Conor Egan
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: 

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer. 
2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution. 

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies, 
either expressed or implied, of the FreeBSD Project.


================================================
FILE: README.md
================================================
# TheMovieDB API
[![Download](https://img.shields.io/github/v/release/c-eg/themoviedbapi)](https://github.com/c-eg/themoviedbapi/releases)
[![BSD 2 License](http://img.shields.io/badge/license-BSD_2_Clause-green.svg)](https://opensource.org/licenses/BSD-2-Clause)

This library provides a Java-wrapper around the [JSON API](https://developer.themoviedb.org/docs/getting-started) provided by
[TMdB](https://www.themoviedb.org/), which is an open database for movie and tv content.

The wrapper implements most, if not all, of the JSON API. However, because the API is subject to constantly change, new functionality may 
not be implemented, or current functionality may break. Please point this out by submitting an issue, or even better, just send us a pull 
request!

It's available via [Maven Central](https://central.sonatype.com/artifact/uk.co.conoregan/themoviedbapi). Just add it as dependency to your 
project.

<details open>
<summary>Maven</summary>

```xml
<dependency>
    <groupId>uk.co.conoregan</groupId>
    <artifactId>themoviedbapi</artifactId>
    <version>{version}</version>
</dependency>
```
</details>

<details>
<summary>Gradle (Kotlin)</summary>

```kotlin
dependencies {
    implementation("uk.co.conoregan:themoviedbapi:{version}")
}
```
</details>

## Usage
To register for a TMdB API key, click the [API link](https://www.themoviedb.org/settings/api) from within your account settings page. There are two types of API keys currently provided by TMdB, please ensure you are using the `API Read Access Token` key.

With this you can instantiate `info.movito.themoviedbapi.TmdbApi`, which has getters for all subcategories of the API, e.g.
```java
TmdbApi tmdbApi = new TmdbApi("<apikey>");
```

### Examples
#### Get movie details
```java
TmdbMovies tmdbMovies = tmdbApi.getMovies();
MovieDb movie = tmdbMovies.getDetails(5353, "en-US");
```

#### Append to response
Some of the API methods support appending additional requests to the response. This concept is part of the underlying 
[TMdB API - Append To Response](https://developer.themoviedb.org/docs/append-to-response), our wrapper just mimics the scheme.

If you try to call the getter for a model that has fields for appendable responses, without providing the append to response parameter to 
the function, it will return  `null`.

```java
TmdbMovies tmdbMovies = tmdbApi.getMovies();

MovieDb movie = tmdbMovies.getDetails(5353, "en-US");
Images images = movie.getImages();  // this will be null

MovieDb movie = tmdbMovies.getDetails(5353, "en-US", MovieAppendToResponse.IMAGES);
Images images = movie.getImages();  // this will NOT be null
```

You can also append multiple responses to the same request by providing multiple append to response values.

```java
TmdbMovies tmdbMovies = tmdbApi.getMovies();

MovieDb movie = tmdbMovies.getDetails(5353, "en-US", MovieAppendToResponse.IMAGES, MovieAppendToResponse.VIDEOS);
MovieDb movie = tmdbMovies.getDetails(5353, "en-US", MovieAppendToResponse.values());
```

To find all methods that use append to response, see the `info.movito.themoviedbapi.tools.appendtoresponse.AppendToResponse` interface 
implementations.

### Exception Handling
Every API method can throw a `info.movito.themoviedbapi.tools.TmdbException` if the request fails for any reason. You should catch this 
exception and handle it appropriately.

Some exceptions are caused because the response status provided by the TMdB API is not successful. To see more details, see the 
`info.movito.themoviedbapi.tools.TmdbResponseCode` and [TMdB Errors](https://developer.themoviedb.org/docs/errors).

In the example below, the response was successful, but response code returned by TMdB API was not successful due to an authentication
failure. 

```java
TmdbMovies tmdbMovies = tmdbApi.getMovies();

try {
    AccountStates accountStates = tmdbMovies.getAccountStates(-1, "accountId", null);
}
catch (TmdbResponseException exception) {
    TmdbResponseCode responseCode = exception.getResponseCode();
    // handle unsuccessful TMdB response code
}
catch (TmdbException exception) {
    // handle unknown-cause exception
}
```

We chose to throw exceptions rather than returning `null`, so you have more control over what you do with each failure case. E.g. with the
example above, you may want to display an error message to the user about failing authentication.

## Project Logging

This project uses [SLF4J](http://www.slf4j.org) to abstract the logging in the project. To use the logging in your own
project you should add one of the provided [adapter bindings](http://www.slf4j.org/manual.html).

## Prooguard / R8 rules
Model classes are placed under `info.movito.themoviedbapi.model` package. Add this to `proguard-rules.pro` so that, these classes can 
survive minification.
```
-keep class info.movito.themoviedbapi.model.** { *; }
```

## Notes & Acknowledgements
The library was developed for [Movito](http://www.movito.info) to interact with TMdB services. This library has been inspired by [api-themoviedb](https://github.com/Omertron/api-themoviedb) but
has been rewritten to provide a more open license, a more clean API, and to expose more features of the TMdB JSON API.


================================================
FILE: build.gradle.kts
================================================
plugins {
    `java-library`
    checkstyle
    `maven-publish`
    signing
    id("io.github.gradle-nexus.publish-plugin") version "2.0.0"
    id("org.jreleaser") version "1.23.0"
}

group = "uk.co.conoregan"
version = "2.6.0"

repositories {
    mavenCentral()
}

dependencies {
    // logging
    implementation(platform("org.slf4j:slf4j-bom:2.0.17"))
    implementation("org.slf4j:slf4j-api")

    // testing
    testImplementation(platform("org.junit:junit-bom:6.0.3"))
    testImplementation("org.junit.jupiter:junit-jupiter")
    testRuntimeOnly("org.junit.platform:junit-platform-launcher")  // gradle bundled version is incompatible with 5.12

    testImplementation(platform("org.mockito:mockito-bom:5.22.0"))
    testImplementation("org.mockito:mockito-core")

    // util
    compileOnly("org.projectlombok:lombok:1.18.42")
    annotationProcessor("org.projectlombok:lombok:1.18.42")
    testCompileOnly("org.projectlombok:lombok:1.18.42")
    testAnnotationProcessor("org.projectlombok:lombok:1.18.42")

    implementation(platform("com.fasterxml.jackson:jackson-bom:2.21.1"))
    implementation("com.fasterxml.jackson.core:jackson-annotations")
    implementation("com.fasterxml.jackson.core:jackson-core")
    implementation("com.fasterxml.jackson.core:jackson-databind")

    implementation("org.apache.commons:commons-lang3:3.20.0")
    testImplementation("commons-io:commons-io:2.21.0")
}

java {
    withJavadocJar()
    withSourcesJar()
}

tasks.test {
    useJUnitPlatform()
}

checkstyle {
    toolVersion = "10.17.0"
    configFile = file("config/checkstyle/checkstyle.xml")
}
tasks.checkstyleMain {
    source = fileTree("src/main/java")
}
tasks.checkstyleTest {
    source = fileTree("src/test/java")
}
tasks.withType<Checkstyle>().configureEach {
    reports {
        html.required = true
    }
}

publishing {
    publications {
        create<MavenPublication>("mavenJava") {
            from(components["java"])

            pom {
                name = "themoviedbapi"
                description = "A Java-wrapper around the JSON API provided by TMdB, which is an open database for movie and tv content."
                url = "https://github.com/c-eg/themoviedbapi"

                licenses {
                    license {
                        name = "BSD"
                        url = "https://github.com/c-eg/themoviedbapi/blob/master/LICENCE.txt"
                    }
                }

                scm {
                    connection = "scm:git:github.com/c-eg/themoviedbapi.git"
                    url = "https://github.com/c-eg/themoviedbapi.git"
                }

                developers {
                    developer {
                        id = "holgerbrandl"
                        name = "Holger Brandl"
                        email = "holgerbrandl@gmail.com"
                    }

                    developer {
                        id = "c-eg"
                        name = "Conor Egan"
                        email = "17conoregan@gmail.com"
                    }
                }
            }
        }
    }
    repositories {
        maven {
            url = uri(layout.buildDirectory.dir("staging-deploy"))
        }
    }
}

jreleaser {
    signing {
        pgp {
            active = org.jreleaser.model.Active.ALWAYS
            armored = true
            mode = org.jreleaser.model.Signing.Mode.FILE
            publicKey = "C:/gpg/public.pgp"
            secretKey = "C:/gpg/private.pgp"
        }
    }
    deploy {
        maven {
            mavenCentral {
                create("sonatype") {
                    active = org.jreleaser.model.Active.ALWAYS
                    url.set("https://central.sonatype.com/api/v1/publisher")
                    stagingRepository("build/staging-deploy")
                }
            }
        }
    }
}

if (project.hasProperty("signing.keyId") && project.hasProperty("signing.password") && project.hasProperty("signing.secretKeyRingFile")) signing {
    sign(publishing.publications["mavenJava"])
}

tasks.javadoc {
    if (JavaVersion.current().isJava9Compatible) {
        (options as StandardJavadocDocletOptions).addBooleanOption("html5", true)
    }
}

tasks {
    javadoc {
        options {
            (this as CoreJavadocOptions).addBooleanOption("Xdoclint:none", true)
        }
    }
}


================================================
FILE: config/checkstyle/checkstyle.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
        "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
        "https://checkstyle.org/dtds/configuration_1_3.dtd">

<!-- Inspiration for this config was taken from Google's checkstyle config:
https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/google_checks.xml -->

<module name="Checker">
    <property name="charset" value="UTF-8"/>
    <property name="severity" value="error"/>
    <property name="fileExtensions" value="java, properties, xml"/>

    <!-- Excludes all 'module-info.java' files. See: https://checkstyle.org/filefilters/index.html -->
    <module name="BeforeExecutionExclusionFileFilter">
        <property name="fileNamePattern" value="module\-info\.java$"/>
    </module>

    <!-- Checks for whitespace. See: http://checkstyle.org/checks/whitespace/index.html -->
    <module name="FileTabCharacter">
        <property name="eachLine" value="true"/>
    </module>

    <module name="LineLength">
        <property name="fileExtensions" value="java"/>
        <property name="max" value="140"/>
        <property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
    </module>

    <module name="NewlineAtEndOfFile"/>

    <module name="SuppressionFilter">
        <property name="file" value="${config_loc}/suppressions.xml"/>
        <property name="optional" value="false"/>
    </module>
    <module name="SuppressWarningsFilter"/>

    <module name="UniqueProperties"/>

    <module name="TreeWalker">
        <!-- Annotations -->
        <module name="AnnotationLocation">
            <property name="allowSamelineSingleParameterlessAnnotation" value="false"/>
        </module>
        <module name="MissingDeprecated"/>
        <module name="MissingOverride"/>

        <!-- Block Checks -->
        <module name="AvoidNestedBlocks"/>
        <module name="EmptyBlock"/>
        <module name="EmptyCatchBlock">
            <property name="exceptionVariableName" value="expected"/>
        </module>
        <module name="LeftCurly">
            <property name="ignoreEnums" value="false"/>
        </module>
        <module name="NeedBraces"/>
        <module name="RightCurly">
            <property name="option" value="alone"/>
        </module>

        <!-- Class Design -->
        <module name="HideUtilityClassConstructor"/>
        <module name="InnerTypeLast"/>
        <module name="InterfaceIsType"/>
        <module name="OneTopLevelClass"/>
        <module name="ThrowsCount"/>

        <!-- Coding -->
        <module name="ArrayTrailingComma"/>
        <module name="AvoidDoubleBraceInitialization"/>
        <module name="AvoidNoArgumentSuperConstructorCall"/>
        <module name="DefaultComesLast"/>
        <module name="EmptyStatement"/>
        <module name="EqualsHashCode"/>
        <module name="FallThrough"/>
        <module name="IllegalCatch">
            <property name="severity" value="warning"/>
            <property name="illegalClassNames" value="Exception, java.lang.Exception"/>
        </module>
        <module name="IllegalThrows">
            <property name="severity" value="warning"/>
            <property name="illegalClassNames" value="Exception, java.lang.Exception"/>
        </module>
        <module name="InnerAssignment"/>
        <module name="MissingSwitchDefault"/>
        <module name="MultipleVariableDeclarations"/>
        <module name="NoArrayTrailingComma"/>
        <module name="NoEnumTrailingComma"/>
        <module name="NoFinalizer"/>
        <module name="OneStatementPerLine"/>
        <module name="OverloadMethodsDeclarationOrder"/>
        <module name="SimplifyBooleanExpression">
            <property name="severity" value="warning"/>
        </module>
        <module name="StringLiteralEquality"/>
        <module name="UnnecessarySemicolonAfterOuterTypeDeclaration"/>
        <module name="UnnecessarySemicolonAfterTypeMemberDeclaration"/>
        <module name="UnnecessarySemicolonInTryWithResources"/>
        <module name="UnusedLocalVariable"/>

        <!-- Imports -->
        <module name="AvoidStarImport"/>
        <module name="ImportOrder">
            <property name="groups" value="java"/>
            <property name="option" value="bottom"/>
            <property name="separated" value="true"/>
            <property name="separatedStaticGroups" value="true"/>
            <property name="sortStaticImportsAlphabetically" value="true"/>
        </module>
        <module name="RedundantImport"/>
        <module name="UnusedImports"/>

        <!-- Javadoc Comments -->
        <module name="AtclauseOrder"/>
        <module name="InvalidJavadocPosition"/>
        <module name="JavadocContentLocation"/>
        <module name="JavadocMethod">
            <property name="accessModifiers" value="public, protected"/>
            <property name="allowMissingParamTags" value="true"/>
            <property name="allowMissingReturnTag" value="true"/>
            <property name="allowedAnnotations" value="Override, Test"/>
        </module>
        <module name="JavadocMissingLeadingAsterisk"/>
        <module name="JavadocMissingWhitespaceAfterAsterisk"/>
        <module name="JavadocStyle"/>
        <module name="JavadocType"/>
        <module name="MissingJavadocMethod">
            <property name="allowMissingPropertyJavadoc" value="true"/>
            <property name="scope" value="protected"/>
        </module>
        <module name="MissingJavadocType"/>
        <module name="NonEmptyAtclauseDescription"/>
        <module name="RequireEmptyLineBeforeBlockTagGroup"/>
        <module name="SingleLineJavadoc"/>

        <!-- Miscellaneous -->
        <module name="ArrayTypeStyle"/>
        <module name="AvoidEscapedUnicodeCharacters">
            <property name="allowEscapesForControlCharacters" value="true"/>
            <property name="allowByTailComment" value="true"/>
            <property name="allowNonPrintableEscapes" value="true"/>
        </module>
        <module name="CommentsIndentation"/>
        <module name="Indentation"/>
        <module name="OuterTypeFilename"/>
        <module name="UpperEll"/>

        <!-- Modifiers -->
        <module name="ModifierOrder"/>

        <!-- Naming Conventions -->
        <module name="AbbreviationAsWordInName">
            <property name="ignoreFinal" value="false"/>
            <property name="allowedAbbreviationLength" value="5"/>
        </module>
        <module name="CatchParameterName">
            <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
            <message key="name.invalidPattern" value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <module name="ClassTypeParameterName">
            <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
            <message key="name.invalidPattern" value="Class type name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <module name="InterfaceTypeParameterName">
            <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
            <message key="name.invalidPattern" value="Interface type name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <module name="LambdaParameterName">
            <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
            <message key="name.invalidPattern" value="Lambda parameter name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <module name="LocalVariableName">
            <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
            <message key="name.invalidPattern" value="Local variable name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <module name="MemberName">
            <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
            <message key="name.invalidPattern" value="Member name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <module name="MethodName">
            <property name="format" value="^[a-z][a-z0-9]\w*$"/>
            <message key="name.invalidPattern" value="Method name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <module name="MethodTypeParameterName">
            <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
            <message key="name.invalidPattern" value="Method type name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <module name="PackageName">
            <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
            <message key="name.invalidPattern" value="Package name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <module name="ParameterName">
            <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
            <message key="name.invalidPattern" value="Parameter name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <module name="PatternVariableName">
            <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
            <message key="name.invalidPattern" value="Pattern variable name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <module name="RecordComponentName">
            <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
            <message key="name.invalidPattern" value="Record component name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <module name="RecordTypeParameterName">
            <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
            <message key="name.invalidPattern" value="Record type name ''{0}'' must match pattern ''{1}''."/>
        </module>
        <module name="TypeName">
            <message key="name.invalidPattern" value="Type name ''{0}'' must match pattern ''{1}''."/>
        </module>

        <!-- Whitespace -->
        <module name="EmptyLineSeparator">
            <property name="allowNoEmptyLineBetweenFields" value="true"/>
            <property name="allowMultipleEmptyLines" value="false"/>
            <property name="allowMultipleEmptyLinesInsideClassMembers" value="false"/>
        </module>
        <module name="GenericWhitespace">
            <message key="ws.followed" value="GenericWhitespace ''{0}'' is followed by whitespace."/>
            <message key="ws.preceded" value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
            <message key="ws.illegalFollow" value="GenericWhitespace ''{0}'' should followed by whitespace."/>
            <message key="ws.notPreceded" value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
        </module>
        <module name="MethodParamPad"/>
        <module name="NoLineWrap"/>
        <module name="NoWhitespaceBefore">
            <property name="allowLineBreaks" value="true"/>
        </module>
        <module name="NoWhitespaceBeforeCaseDefaultColon"/>
        <module name="ParenPad"/>
        <module name="SeparatorWrap">
            <property name="id" value="SeparatorWrapDot"/>
            <property name="tokens" value="DOT"/>
            <property name="option" value="nl"/>
        </module>
        <module name="SeparatorWrap">
            <property name="id" value="SeparatorWrapComma"/>
            <property name="tokens" value="COMMA"/>
            <property name="option" value="eol"/>
        </module>
        <module name="SeparatorWrap">
            <property name="id" value="SeparatorWrapEllipsis"/>
            <property name="tokens" value="ELLIPSIS"/>
            <property name="option" value="eol"/>
        </module>
        <module name="SeparatorWrap">
            <property name="id" value="SeparatorWrapArrayDeclarator"/>
            <property name="tokens" value="ARRAY_DECLARATOR"/>
            <property name="option" value="eol"/>
        </module>
        <module name="SeparatorWrap">
            <property name="id" value="SeparatorWrapMethodRef"/>
            <property name="tokens" value="METHOD_REF"/>
            <property name="option" value="nl"/>
        </module>
        <module name="WhitespaceAfter"/>
        <module name="WhitespaceAround">
            <property name="allowEmptyConstructors" value="true"/>
            <property name="allowEmptyLambdas" value="true"/>
            <property name="allowEmptyLoops" value="true"/>
            <property name="allowEmptyMethods" value="true"/>
            <property name="allowEmptyTypes" value="true"/>
            <property name="ignoreEnhancedForColon" value="false"/>
            <message key="ws.notFollowed"
                     value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks
               may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
            <message key="ws.notPreceded" value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
        </module>

        <!-- Filters -->
        <module name="SuppressWarningsHolder"/>
        <module name="SuppressionCommentFilter">
            <property name="offCommentFormat" value="CHECKSTYLE OFF\: ([\w\|]+)" />
            <property name="onCommentFormat" value="CHECKSTYLE ON\: ([\w\|]+)" />
            <property name="checkFormat" value="$1" />
        </module>
        <module name="SuppressWithNearbyCommentFilter">
            <property name="commentFormat" value="CHECKSTYLE SUPPRESS\: ([\w\|]+)"/>
            <!-- $1 refers to the first match group in the regex defined in commentFormat -->
            <property name="checkFormat" value="$1"/>
            <!-- The check is suppressed in the next line of code after the comment -->
            <property name="influenceFormat" value="1"/>
        </module>
    </module>
</module>

================================================
FILE: config/checkstyle/suppressions.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
        "-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
        "https://checkstyle.org/dtds/suppressions_1_2.dtd">
<suppressions>
    <!-- disable javadoc check in model package. The classes there are basically just data classes, so no need to document anything -->
    <suppress files="info.movito.themoviedbapi.model" checks="MissingJavadocType"/>
    <suppress files="info.movito.themoviedbapi.model" checks="JavadocMethod"/>
    <!-- disable javadoc check in builders package. The api documentation might change so better to look there for the most up-to-date information -->
    <suppress files="info.movito.themoviedbapi.tools.builders.discover" checks="JavadocMethod"/>

    <suppress files="info.movito.themoviedbapi.tools.TmdbException" checks="JavadocMethod"/>
    <suppress files="info.movito.themoviedbapi.tools.TmdbException" checks="MissingJavadocMethod"/>
</suppressions>


================================================
FILE: devel_notes.md
================================================
# Developer Notes
## How to do a release?

1. Make sure to increase version number in [build.gradle.kts](build.gradle.kts), commit and push the version to the `master` branch

2. Do the release on GitHub

3. Make sure the prerequisites are met that are listed below

4. Clean, publish and deploy
```bash
./gradlew clean && ./gradlew publish && ./gradlew jreleaserDeploy
```

5. Go to [Maven Central Repository](https://central.sonatype.com/publishing/deployments) and verify the deployment was successful


## Prerequisites
### GPG & PGP Keys
Make sure you have the following keys exist:

- `C:/gpg/private.pgp`
- `C:/gpg/public.pgp`
- `C:/gpg/secring.gpg`

### Gradle Properties
Make sure you have the following in your global gradle.properties file `C:\Users\<user>\.gradle\gradle.properties`:

```properties
signing.keyId = <value>
signing.password = <value>
signing.secretKeyRingFile = C:/gpg/secring.gpg
```

### JReleaser Properties
Make sure you have the following in your jreleaser.properties file `C:\Users\<user>\.jreleaser\config.properties`:

```properties
JRELEASER_GPG_PUBLIC_KEY = C:/gpg/public.pgp
JRELEASER_GPG_SECRET_KEY = C:/gpg/private.pgp
JRELEASER_GPG_PASSPHRASE = <value>
JRELEASER_GITHUB_TOKEN = <value>
JRELEASER_MAVENCENTRAL_SONATYPE_USERNAME = <value>
JRELEASER_MAVENCENTRAL_SONATYPE_PASSWORD = <value>
```

Note: `JRELEASER_GITHUB_TOKEN` does not need a valid value, it just needs a non-empty value set.

If you are setting this up for the first time, you can verify your config is configured correctly with:
```bash
./gradlew jreleaserConfig
```

================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


================================================
FILE: gradle.properties
================================================
org.gradle.caching = true
org.gradle.vfs.watch = true


================================================
FILE: gradlew
================================================
#!/bin/sh

#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#

##############################################################################
#
#   Gradle start up script for POSIX generated by Gradle.
#
#   Important for running:
#
#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
#       noncompliant, but you have some other compliant shell such as ksh or
#       bash, then to run this script, type that shell name before the whole
#       command line, like:
#
#           ksh Gradle
#
#       Busybox and similar reduced shells will NOT work, because this script
#       requires all of these POSIX shell features:
#         * functions;
#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
#         * compound commands having a testable exit status, especially «case»;
#         * various built-in commands including «command», «set», and «ulimit».
#
#   Important for patching:
#
#   (2) This script targets any POSIX shell, so it avoids extensions provided
#       by Bash, Ksh, etc; in particular arrays are avoided.
#
#       The "traditional" practice of packing multiple parameters into a
#       space-separated string is a well documented source of bugs and security
#       problems, so this is (mostly) avoided, by progressively accumulating
#       options in "$@", and eventually passing that to Java.
#
#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
#       see the in-line comments for details.
#
#       There are tweaks for specific operating systems such as AIX, CygWin,
#       Darwin, MinGW, and NonStop.
#
#   (3) This script is generated from the Groovy template
#       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
#       within the Gradle project.
#
#       You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################

# Attempt to set APP_HOME

# Resolve links: $0 may be a link
app_path=$0

# Need this for daisy-chained symlinks.
while
    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
    [ -h "$app_path" ]
do
    ls=$( ls -ld "$app_path" )
    link=${ls#*' -> '}
    case $link in             #(
      /*)   app_path=$link ;; #(
      *)    app_path=$APP_HOME$link ;;
    esac
done

# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum

warn () {
    echo "$*"
} >&2

die () {
    echo
    echo "$*"
    echo
    exit 1
} >&2

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in                #(
  CYGWIN* )         cygwin=true  ;; #(
  Darwin* )         darwin=true  ;; #(
  MSYS* | MINGW* )  msys=true    ;; #(
  NONSTOP* )        nonstop=true ;;
esac

CLASSPATH="\\\"\\\""


# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD=$JAVA_HOME/jre/sh/java
    else
        JAVACMD=$JAVA_HOME/bin/java
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD=java
    if ! command -v java >/dev/null 2>&1
    then
        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
    case $MAX_FD in #(
      max*)
        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        MAX_FD=$( ulimit -H -n ) ||
            warn "Could not query maximum file descriptor limit"
    esac
    case $MAX_FD in  #(
      '' | soft) :;; #(
      *)
        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        ulimit -n "$MAX_FD" ||
            warn "Could not set maximum file descriptor limit to $MAX_FD"
    esac
fi

# Collect all arguments for the java command, stacking in reverse order:
#   * args from the command line
#   * the main class name
#   * -classpath
#   * -D...appname settings
#   * --module-path (only if needed)
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.

# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )

    JAVACMD=$( cygpath --unix "$JAVACMD" )

    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    for arg do
        if
            case $arg in                                #(
              -*)   false ;;                            # don't mess with options #(
              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
                    [ -e "$t" ] ;;                      #(
              *)    false ;;
            esac
        then
            arg=$( cygpath --path --ignore --mixed "$arg" )
        fi
        # Roll the args list around exactly as many times as the number of
        # args, so each arg winds up back in the position where it started, but
        # possibly modified.
        #
        # NB: a `for` loop captures its iteration list before it begins, so
        # changing the positional parameters here affects neither the number of
        # iterations, nor the values presented in `arg`.
        shift                   # remove old arg
        set -- "$@" "$arg"      # push replacement arg
    done
fi


# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command:
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
#     and any embedded shellness will be escaped.
#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
#     treated as '${Hostname}' itself on the command line.

set -- \
        "-Dorg.gradle.appname=$APP_BASE_NAME" \
        -classpath "$CLASSPATH" \
        -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
        "$@"

# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
    die "xargs is not available"
fi

# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
#   set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#

eval "set -- $(
        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
        xargs -n1 |
        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
        tr '\n' ' '
    )" '"$@"'

exec "$JAVACMD" "$@"


================================================
FILE: gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem      https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem

@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute

echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto execute

echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

:execute
@rem Setup the command line

set CLASSPATH=


@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*

:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: lombok.config
================================================
config.stopBubbling = true

lombok.addLombokGeneratedAnnotation = true


================================================
FILE: settings.gradle.kts
================================================
rootProject.name = "themoviedbapi"



================================================
FILE: src/main/java/info/movito/themoviedbapi/AbstractTmdbApi.java
================================================
package info.movito.themoviedbapi;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectReader;
import info.movito.themoviedbapi.model.core.responses.ResponseStatus;
import info.movito.themoviedbapi.model.core.responses.TmdbResponseException;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.RequestType;
import info.movito.themoviedbapi.tools.TmdbException;
import info.movito.themoviedbapi.tools.TmdbResponseCode;
import info.movito.themoviedbapi.util.JsonUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static info.movito.themoviedbapi.tools.TmdbResponseCode.REQUEST_LIMIT_EXCEEDED;

/**
 * Class to be inherited by a TmdbApi class.
 */
public abstract class AbstractTmdbApi {
    public static final String PARAM_YEAR = "year";

    public static final String PARAM_PAGE = "page";

    public static final String PARAM_LANGUAGE = "language";

    public static final String PARAM_ADULT = "include_adult";

    public static final String PARAM_SORT_BY = "sort_by";

    private static final ObjectReader RESPONSE_STATUS_READER = JsonUtil.OBJECT_MAPPER.readerFor(ResponseStatus.class);

    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractTmdbApi.class);

    private final TmdbApi tmdbApi;

    AbstractTmdbApi(TmdbApi tmdbApi) {
        this.tmdbApi = tmdbApi;
    }

    /**
     * Maps a json result to a class.
     *
     * @param apiUrl the api url to map
     * @param clazz  the class to map to
     * @param <T>    the type of class to map to
     * @return the mapped class
     */
    protected <T> T mapJsonResult(ApiUrl apiUrl, Class<T> clazz) throws TmdbException {
        return mapJsonResult(apiUrl, null, clazz);
    }

    /**
     * Maps a json result to a class.
     *
     * @param apiUrl      the api url to map
     * @param resultClass the class to map to
     * @param <T>         the type of class to map to
     * @return the mapped class
     */
    protected <T> T mapJsonResult(ApiUrl apiUrl, TypeReference<T> resultClass) throws TmdbException {
        return mapJsonResult(apiUrl, null, resultClass);
    }

    /**
     * Maps a json result to a class.
     *
     * @param apiUrl   the api url to map
     * @param jsonBody the json body
     * @param clazz    the class to map to
     * @param <T>      the type of class to map to
     * @return the mapped class.
     */
    protected <T> T mapJsonResult(ApiUrl apiUrl, String jsonBody, Class<T> clazz) throws TmdbException {
        return mapJsonResult(apiUrl, jsonBody, RequestType.GET, clazz);
    }

    /**
     * Maps a json result to a class.
     *
     * @param apiUrl      the api url to map
     * @param jsonBody    the json body
     * @param resultClass the class to map to
     * @param <T>         the type of class to map to
     * @return the mapped class
     */
    protected <T> T mapJsonResult(ApiUrl apiUrl, String jsonBody, TypeReference<T> resultClass) throws TmdbException {
        return mapJsonResult(apiUrl, jsonBody, RequestType.GET, resultClass);
    }

    /**
     * Maps a json result to a class.
     *
     * @param apiUrl      the api url to map
     * @param jsonBody    the json body
     * @param requestType the type of request
     * @param clazz       the class to map to
     * @param <T>         the type of class to map to
     * @return the mapped class.
     */
    protected <T> T mapJsonResult(ApiUrl apiUrl, String jsonBody, RequestType requestType, Class<T> clazz) throws TmdbException {
        return mapJsonResult(apiUrl, jsonBody, requestType, JsonUtil.OBJECT_MAPPER.readerFor(clazz));
    }

    /**
     * Maps a json result to a class.
     *
     * @param apiUrl      the api url to map
     * @param jsonBody    the json body
     * @param requestType the type of request
     * @param resultClass the class to map to
     * @param <T>         the type of class to map to
     * @return the mapped class.
     */
    protected <T> T mapJsonResult(ApiUrl apiUrl, String jsonBody, RequestType requestType, TypeReference<T> resultClass)
        throws TmdbException {
        return mapJsonResult(apiUrl, jsonBody, requestType, JsonUtil.OBJECT_MAPPER.readerFor(resultClass));
    }

    /**
     * Maps a json result to a class.
     *
     * @param apiUrl       the api url to map
     * @param jsonBody     the json body
     * @param requestType  the type of request
     * @param objectReader the object reader
     * @param <T>          the type of class to map to
     * @return the mapped class.
     */
    private <T> T mapJsonResult(ApiUrl apiUrl, String jsonBody, RequestType requestType, ObjectReader objectReader) throws TmdbException {
        String jsonResponse = tmdbApi.getTmdbUrlReader().readUrl(apiUrl.buildUrl(), jsonBody, requestType);

        try {
            // check if the response was successful. tmdb have their own codes for successful and unsuccessful responses.
            // some 2xx codes are not successful. See: https://developer.themoviedb.org/docs/errors for more info.
            ResponseStatus responseStatus = RESPONSE_STATUS_READER.readValue(jsonResponse);
            TmdbResponseCode tmdbResponseCode = responseStatus.getStatusCode();

            if (tmdbResponseCode != null) {
                if (REQUEST_LIMIT_EXCEEDED == tmdbResponseCode) {
                    LOGGER.info("TMDB API: Request limit exceeded. Waiting 1 second before retrying.");
                    Thread.sleep(1000);
                    return mapJsonResult(apiUrl, jsonBody, requestType, objectReader);
                }
                else if (!tmdbResponseCode.isSuccess()) {
                    throw new TmdbResponseException(tmdbResponseCode);
                }
            }
        }
        catch (JsonProcessingException exception) {
            // ignore, not an error - caused by RESPONSE_STATUS_READER.readValue(jsonResponse);
            // this is necessary because if some requests fail (including 2xx responses), the response is a json object
        }
        catch (InterruptedException exception) {
            throw new TmdbException(exception);
        }

        try {
            return objectReader.readValue(jsonResponse);
        }
        catch (JsonProcessingException exception) {
            throw new TmdbException(exception);
        }
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbAccount.java
================================================
package info.movito.themoviedbapi;

import java.util.HashMap;

import info.movito.themoviedbapi.model.account.Account;
import info.movito.themoviedbapi.model.core.MovieResultsPage;
import info.movito.themoviedbapi.model.core.TvSeriesResultsPage;
import info.movito.themoviedbapi.model.core.responses.ResponseStatus;
import info.movito.themoviedbapi.model.movies.MovieListResultsPage;
import info.movito.themoviedbapi.model.rated.RatedMovieResultsPage;
import info.movito.themoviedbapi.model.rated.RatedTvEpisodeResultsPage;
import info.movito.themoviedbapi.model.rated.RatedTvSeriesResultsPage;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.RequestType;
import info.movito.themoviedbapi.tools.TmdbException;
import info.movito.themoviedbapi.tools.sortby.AccountSortBy;
import info.movito.themoviedbapi.util.JsonUtil;

/**
 * The movie database api for accounts. See the
 * <a href="https://developer.themoviedb.org/reference/account-details">documentation</a> for more info.
 */
public class TmdbAccount extends AbstractTmdbApi {
    public static final String PARAM_SESSION = "session_id";
    protected static final String TMDB_METHOD_ACCOUNT = "account";

    /**
     * Create a new TmdbAccount instance to call the account related TMDb API methods.
     */
    TmdbAccount(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get the basic information for an account. You will need to have a valid session id.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/account-details">documentation</a> for more info.</p>
     *
     * @param accountId The account id of the user.
     * @param sessionId nullable - The session id of the user.
     * @return The account details.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public Account getDetails(Integer accountId, String sessionId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_ACCOUNT, accountId)
            .addQueryParam(PARAM_SESSION, sessionId);

        return mapJsonResult(apiUrl, Account.class);
    }

    /**
     * <p>Add media to an account's favorites list.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/account-add-favorite">documentation</a> for more info.</p>
     *
     * @param accountId The account id of the user.
     * @param sessionId nullable - The session id of the user.
     * @param mediaId   the id of the media to add to the favorites list.
     * @param mediaType the type of media to add to the favorites list.
     * @return The status of the request.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ResponseStatus addFavorite(Integer accountId, String sessionId, Integer mediaId, MediaType mediaType)
        throws TmdbException {
        return changeFavoriteStatus(accountId, sessionId, mediaId, mediaType, true);
    }

    /**
     * <p>Remove media to an account's favorites list.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/account-add-favorite">documentation</a> for more info.</p>
     *
     * @param accountId The account id of the user.
     * @param sessionId nullable - The session id of the user.
     * @param mediaId   the id of the media to remove from the favorites list.
     * @param mediaType the type of media to remove from the favorites list.
     * @return The status of the request.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ResponseStatus removeFavorite(Integer accountId, String sessionId, Integer mediaId, MediaType mediaType)
        throws TmdbException {
        return changeFavoriteStatus(accountId, sessionId, mediaId, mediaType, false);
    }

    private ResponseStatus changeFavoriteStatus(Integer accountId, String sessionId, Integer mediaId, MediaType mediaType,
                                                boolean isFavorite) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_ACCOUNT, accountId, "favorite")
            .addQueryParam(PARAM_SESSION, sessionId);

        HashMap<String, Object> body = new HashMap<>();
        body.put("media_type", mediaType.toString());
        body.put("media_id", mediaId);
        body.put("favorite", isFavorite);

        String jsonBody = JsonUtil.toJson(body);
        return mapJsonResult(apiUrl, jsonBody, RequestType.POST, ResponseStatus.class);
    }

    /**
     * <p>Add media to an account's watch list.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/account-add-to-watchlist">documentation</a> for more info.</p>
     *
     * @param accountId The account id of the user.
     * @param sessionId nullable - The session id of the user.
     * @param mediaId   the id of the media to add to the watch list.
     * @param mediaType the type of media to add to the watch list.
     * @return The status of the request.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ResponseStatus addToWatchList(Integer accountId, String sessionId, Integer mediaId, MediaType mediaType)
        throws TmdbException {
        return changeWatchListStatus(accountId, sessionId, mediaId, mediaType, true);
    }

    /**
     * <p>Remove media to an account's watch list.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/account-add-to-watchlist">documentation</a> for more info.</p>
     *
     * @param accountId The account id of the user.
     * @param sessionId nullable - The session id of the user.
     * @param mediaId   the id of the media to remove from the watch list.
     * @param mediaType the type of media to remove from the watch list.
     * @return The status of the request.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ResponseStatus removeFromWatchList(Integer accountId, String sessionId, Integer mediaId, MediaType mediaType)
        throws TmdbException {
        return changeWatchListStatus(accountId, sessionId, mediaId, mediaType, false);
    }

    private ResponseStatus changeWatchListStatus(Integer accountId, String sessionId, Integer mediaId, MediaType mediaType,
                                                 boolean isWatchList) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_ACCOUNT, accountId, "watchlist")
            .addQueryParam(PARAM_SESSION, sessionId);

        HashMap<String, Object> body = new HashMap<>();
        body.put("media_type", mediaType.toString());
        body.put("media_id", mediaId);
        body.put("watchlist", isWatchList);

        String jsonBody = JsonUtil.toJson(body);
        return mapJsonResult(apiUrl, jsonBody, RequestType.POST, ResponseStatus.class);
    }

    /**
     * <p>Get the favorite movies from the account.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/account-get-favorites">documentation</a> for more info.</p>
     *
     * @param accountId The account id of the user.
     * @param sessionId nullable - The session id of the user.
     * @param language  nullable - The language to query the results in. Default: en-US.
     * @param page      nullable - The page of results to return. Default: 1.
     * @param sortBy    nullable - The sort order of the results.
     * @return The favorite movies of the user.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieResultsPage getFavoriteMovies(Integer accountId, String sessionId, String language, Integer page,
                                              AccountSortBy sortBy) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_ACCOUNT, accountId, "favorite/movies")
            .addQueryParam(PARAM_SESSION, sessionId)
            .addLanguage(language)
            .addPage(page)
            .addSortBy(sortBy);

        return mapJsonResult(apiUrl, MovieResultsPage.class);
    }

    /**
     * <p>Get the favorite tv shows from the account.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/account-favorite-tv">documentation</a> for more info.</p>
     *
     * @param accountId The account id of the user.
     * @param sessionId nullable - The session id of the user.
     * @param language  nullable - The language to query the results in. Default: en-US.
     * @param page      nullable - The page of results to return. Default: 1.
     * @param sortBy    nullable - The sort order of the results.
     * @return The favorite tv series of the user.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public TvSeriesResultsPage getFavoriteTv(Integer accountId, String sessionId, String language, Integer page,
                                             AccountSortBy sortBy) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_ACCOUNT, accountId, "favorite/tv")
            .addQueryParam(PARAM_SESSION, sessionId)
            .addLanguage(language)
            .addPage(page)
            .addSortBy(sortBy);

        return mapJsonResult(apiUrl, TvSeriesResultsPage.class);
    }

    /**
     * <p>Get the lists that as user has created.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/account-lists">documentation</a> for more info.</p>
     *
     * @param accountId The account id of the user.
     * @param sessionId nullable - The session id of the user.
     * @param page      nullable - The page of results to return. Default: 1.
     * @return The lists of the user.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieListResultsPage getLists(Integer accountId, String sessionId, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_ACCOUNT, accountId, "lists")
            .addQueryParam(PARAM_SESSION, sessionId)
            .addPage(page);

        return mapJsonResult(apiUrl, MovieListResultsPage.class);
    }

    /**
     * <p>Get the rated movies from the account.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/account-rated-movies">documentation</a> for more info.</p>
     *
     * @param accountId The account id of the user.
     * @param sessionId nullable - The session id of the user.
     * @param language  nullable - The language to query the results in. Default: en-US.
     * @param page      nullable - The page of results to return. Default: 1.
     * @param sortBy    nullable - The sort order of the results.
     * @return The rated movies of the user.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public RatedMovieResultsPage getRatedMovies(int accountId, String sessionId, String language, Integer page,
                                                AccountSortBy sortBy) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_ACCOUNT, accountId, "rated/movies")
            .addQueryParam(PARAM_SESSION, sessionId)
            .addLanguage(language)
            .addPage(page)
            .addSortBy(sortBy);

        return mapJsonResult(apiUrl, RatedMovieResultsPage.class);
    }

    /**
     * <p>Get the rated tv shows from the account.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/account-rated-tv">documentation</a> for more info.</p>
     *
     * @param accountId The account id of the user.
     * @param sessionId nullable - The session id of the user.
     * @param language  nullable - The language to query the results in. Default: en-US.
     * @param page      nullable - The page of results to return. Default: 1.
     * @param sortBy    nullable - The sort order of the results.
     * @return The rated tv series of the user.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public RatedTvSeriesResultsPage getRatedTvSeries(int accountId, String sessionId, String language, Integer page,
                                                     AccountSortBy sortBy) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_ACCOUNT, accountId, "rated/tv")
            .addQueryParam(PARAM_SESSION, sessionId)
            .addLanguage(language)
            .addPage(page)
            .addSortBy(sortBy);

        return mapJsonResult(apiUrl, RatedTvSeriesResultsPage.class);
    }

    /**
     * <p>Get the rated tv episodes from the account.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/account-rated-tv-episodes">documentation</a> for more info.</p>
     *
     * @param accountId The account id of the user.
     * @param sessionId nullable - The session id of the user.
     * @param language  nullable - The language to query the results in. Default: en-US.
     * @param page      nullable - The page of results to return. Default: 1.
     * @param sortBy    nullable - The sort order of the results.
     * @return The rated tv episodes of the user.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public RatedTvEpisodeResultsPage getRatedTvEpisodes(int accountId, String sessionId, String language, Integer page,
                                                        AccountSortBy sortBy) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_ACCOUNT, accountId, "rated/tv/episodes")
            .addQueryParam(PARAM_SESSION, sessionId)
            .addLanguage(language)
            .addPage(page)
            .addSortBy(sortBy);

        return mapJsonResult(apiUrl, RatedTvEpisodeResultsPage.class);
    }

    /**
     * <p>Get the list of movies on an accounts watchlist.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/account-watchlist-movies">documentation</a> for more info.</p>
     *
     * @param accountId The account id of the user.
     * @param sessionId nullable - The session id of the user.
     * @param language  nullable - The language to query the results in. Default: en-US.
     * @param page      nullable - The page of results to return. Default: 1.
     * @param sortBy    nullable - The sort order of the results.
     * @return The movies in the account's watchlist
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieResultsPage getWatchListMovies(Integer accountId, String sessionId, String language, Integer page,
                                               AccountSortBy sortBy) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_ACCOUNT, accountId, "watchlist/movies")
            .addQueryParam(PARAM_SESSION, sessionId)
            .addLanguage(language)
            .addPage(page)
            .addSortBy(sortBy);

        return mapJsonResult(apiUrl, MovieResultsPage.class);
    }

    /**
     * <p>Get the list of tv series on an accounts watchlist.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/account-watchlist-tv">documentation</a> for more info.</p>
     *
     * @param accountId The account id of the user.
     * @param sessionId nullable - The session id of the user.
     * @param language  nullable - The language to query the results in. Default: en-US.
     * @param page      nullable - The page of results to return. Default: 1.
     * @param sortBy    nullable - The sort order of the results.
     * @return The tv series in the account's watchlist
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public TvSeriesResultsPage getWatchListTvSeries(Integer accountId, String sessionId, String language, Integer page,
                                                    AccountSortBy sortBy) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_ACCOUNT, accountId, "watchlist/tv")
            .addQueryParam(PARAM_SESSION, sessionId)
            .addLanguage(language)
            .addPage(page)
            .addSortBy(sortBy);

        return mapJsonResult(apiUrl, TvSeriesResultsPage.class);
    }

    /**
     * Needed to tell TMDB API about what type of id is provided.
     * e.g. see the <a href="https://developer.themoviedb.org/reference/account-add-favorite">documentation</a>
     */
    public enum MediaType {
        MOVIE, TV;

        @Override
        public String toString() {
            return super.toString().toLowerCase();
        }
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbApi.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.tools.TmdbHttpClient;
import info.movito.themoviedbapi.tools.TmdbUrlReader;
import lombok.AccessLevel;
import lombok.Getter;

/**
 * The movie db api for getting started. See the
 * <a href="https://developer.themoviedb.org/docs/getting-started">documentation</a> for more info.
 *
 * @author Holger Brandl.
 */
public class TmdbApi {
    /**
     * Http client to make requests to the movie database api.
     */
    @Getter(AccessLevel.PROTECTED)
    private final TmdbUrlReader tmdbUrlReader;

    /**
     * Constructor.
     *
     * @param apiKey your TMDB api key
     */
    public TmdbApi(String apiKey) {
        this(new TmdbHttpClient(apiKey));
    }

    /**
     * Constructor.
     *
     * @param tmdbUrlReader the url reader to use
     */
    public TmdbApi(TmdbUrlReader tmdbUrlReader) {
        this.tmdbUrlReader = tmdbUrlReader;
    }

    public TmdbAccount getAccount() {
        return new TmdbAccount(this);
    }

    public TmdbAuthentication getAuthentication() {
        return new TmdbAuthentication(this);
    }

    public TmdbCertifications getCertifications() {
        return new TmdbCertifications(this);
    }

    public TmdbChanges getChanges() {
        return new TmdbChanges(this);
    }

    public TmdbCollections getCollections() {
        return new TmdbCollections(this);
    }

    public TmdbCompanies getCompanies() {
        return new TmdbCompanies(this);
    }

    public TmdbConfiguration getConfiguration() {
        return new TmdbConfiguration(this);
    }

    public TmdbDiscover getDiscover() {
        return new TmdbDiscover(this);
    }

    public TmdbFind getFind() {
        return new TmdbFind(this);
    }

    public TmdbGenre getGenre() {
        return new TmdbGenre(this);
    }

    public TmdbGuestSessions getGuestSessions() {
        return new TmdbGuestSessions(this);
    }

    public TmdbKeywords getKeywords() {
        return new TmdbKeywords(this);
    }

    public TmdbLists getLists() {
        return new TmdbLists(this);
    }

    public TmdbMovieLists getMovieLists() {
        return new TmdbMovieLists(this);
    }

    public TmdbMovies getMovies() {
        return new TmdbMovies(this);
    }

    public TmdbNetworks getNetworks() {
        return new TmdbNetworks(this);
    }

    public TmdbPeopleLists getPeopleLists() {
        return new TmdbPeopleLists(this);
    }

    public TmdbPeople getPeople() {
        return new TmdbPeople(this);
    }

    public TmdbReviews getReviews() {
        return new TmdbReviews(this);
    }

    public TmdbSearch getSearch() {
        return new TmdbSearch(this);
    }

    public TmdbTrending getTrending() {
        return new TmdbTrending(this);
    }

    public TmdbTvEpisodes getTvEpisodes() {
        return new TmdbTvEpisodes(this);
    }

    public TmdbTvEpisodeGroups getTvEpisodeGroups() {
        return new TmdbTvEpisodeGroups(this);
    }

    public TmdbTvSeasons getTvSeasons() {
        return new TmdbTvSeasons(this);
    }

    public TmdbTvSeries getTvSeries() {
        return new TmdbTvSeries(this);
    }

    public TmdbTvSeriesLists getTvSeriesLists() {
        return new TmdbTvSeriesLists(this);
    }

    public TmdbWatchProviders getWatchProviders() {
        return new TmdbWatchProviders(this);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbAuthentication.java
================================================
package info.movito.themoviedbapi;

import java.util.HashMap;

import info.movito.themoviedbapi.model.authentication.GuestSession;
import info.movito.themoviedbapi.model.authentication.RequestToken;
import info.movito.themoviedbapi.model.authentication.Session;
import info.movito.themoviedbapi.model.core.responses.ResponseStatusAuthentication;
import info.movito.themoviedbapi.model.core.responses.ResponseStatusDelete;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.RequestType;
import info.movito.themoviedbapi.tools.TmdbException;
import info.movito.themoviedbapi.util.JsonUtil;

/**
 * The movie database api for authentication. See the
 * <a href="https://developer.themoviedb.org/reference/authentication-how-do-i-generate-a-session-id">documentation</a> for more info.
 */
public class TmdbAuthentication extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_AUTH = "authentication";

    private static final String PARAM_REQUEST_TOKEN = "request_token";

    /**
     * Create a new TmdbAuthentication instance to call the authentication related TMDb API methods.
     */
    TmdbAuthentication(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Creates a guest session.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/authentication-create-guest-session">documentation</a>
     * for more info.</p>
     *
     * @return The guest session.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public GuestSession createGuestSession() throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_AUTH, "guest_session/new");
        return mapJsonResult(apiUrl, GuestSession.class);
    }

    /**
     * <p>Creates an unauthenticated request token. This will need to be authenticated by the user using
     * {@link #getTmdbAuthenticationUrlForRequestToken(RequestToken, String)}. If you cannot redirect the user to a browser,
     * use {@link #createAuthenticatedRequestToken(RequestToken, String, String)} instead.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/authentication-create-request-token">documentation</a>
     * for more info.</p>
     *
     * @return The unauthenticated request token.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public RequestToken createRequestToken() throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_AUTH, "token/new");
        return mapJsonResult(apiUrl, RequestToken.class);
    }

    /**
     * <p>Creates the url to redirect the user to in order to authenticate their request token.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/authentication-how-do-i-generate-a-session-id">documentation</a>
     * for more info.</p>
     *
     * @param token The request token.
     * @param redirectUrl nullable - The url to redirect the user to after authentication.
     * @return The url to redirect the user to.
     * @throws TmdbException If the request token is null or not successful.
     */
    public static String getTmdbAuthenticationUrlForRequestToken(RequestToken token, String redirectUrl) throws TmdbException {
        if (token == null || !token.getSuccess()) {
            throw new TmdbException("Invalid request token! The request token must not be null and must be successful!");
        }

        StringBuilder sb = new StringBuilder("https://www.themoviedb.org/authenticate/");
        sb.append(token.getRequestToken());

        if (redirectUrl != null && !redirectUrl.trim().isEmpty()) {
            sb.append("?redirect_to=").append(redirectUrl);
        }

        return sb.toString();
    }

    /**
     * <p>Creates an authenticated request token, with the non-authenticated request token, username and password.</p>
     * <p>Use this function if you have no way of directing the user to a browser for authentication.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/authentication-create-session-from-login">documentation</a>
     * for more info.</p>
     *
     * @param token    The unauthenticated request token.
     * @param username The TMDB account username.
     * @param password The TMDB account password.
     * @return The authenticated request token.
     * @throws TmdbException If the request token is null or not successful. Or, if there was an error making the request or mapping the
     *                       response.
     */
    public RequestToken createAuthenticatedRequestToken(RequestToken token, String username, String password) throws TmdbException {
        if (token == null || !token.getSuccess()) {
            throw new TmdbException("Invalid request token! The request token must not be null and must be successful!");
        }

        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_AUTH, "token/validate_with_login");

        HashMap<String, Object> body = new HashMap<>();
        body.put("username", username);
        body.put("password", password);
        body.put(PARAM_REQUEST_TOKEN, token.getRequestToken());
        String jsonBody = JsonUtil.toJson(body);

        return mapJsonResult(apiUrl, jsonBody, RequestType.POST, RequestToken.class);
    }

    /**
     * <p>Creates a session with an authenticated request token.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/authentication-create-session">documentation</a>
     * for more info.</p>
     *
     * @param token The authenticated request token.
     * @return The session.
     * @throws TmdbException If the request token is null or not successful.
     */
    public Session createSession(RequestToken token) throws TmdbException {
        if (token == null || !token.getSuccess()) {
            throw new TmdbException("Invalid request token! The request token must not be null and must be successful!");
        }

        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_AUTH, "session/new");

        HashMap<String, Object> body = new HashMap<>();
        body.put(PARAM_REQUEST_TOKEN, token.getRequestToken());
        String jsonBody = JsonUtil.toJson(body);

        return mapJsonResult(apiUrl, jsonBody, RequestType.POST, Session.class);
    }

    /**
     * <p>Deletes a session.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/authentication-delete-session">documentation</a>
     * for more info.</p>
     *
     * @param sessionId The session id.
     * @return The response status.
     * @throws TmdbException If the session id is null or empty. Or, if there was an error making the request or mapping the response.
     */
    public ResponseStatusDelete deleteSession(String sessionId) throws TmdbException {
        if (sessionId == null || sessionId.trim().isEmpty()) {
            throw new TmdbException("Invalid session id! The session id must not be null or empty!");
        }

        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_AUTH, "session");

        HashMap<String, Object> body = new HashMap<>();
        body.put("session_id", sessionId);
        String jsonBody = JsonUtil.toJson(body);

        return mapJsonResult(apiUrl, jsonBody, RequestType.DELETE, ResponseStatusDelete.class);
    }

    /**
     * <p>Test your API Key to see if it's valid.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/authentication-validate-key">documentation</a>
     * for more info.</p>
     *
     * @return The response status.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ResponseStatusAuthentication validateKey() throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_AUTH);
        return mapJsonResult(apiUrl, ResponseStatusAuthentication.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbCertifications.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.certifications.CertificationResults;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;

/**
 * The movie database api for certifications. See the
 * <a href="https://developer.themoviedb.org/reference/certification-movie-list">documentation</a> for more info.
 */
public class TmdbCertifications extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_CERTIFICATIONS = "certification";

    protected static final String TMDB_METHOD_MOVIE_CERTIFICATIONS = "movie/list";

    protected static final String TMDB_METHOD_TV_CERTIFICATIONS = "tv/list";

    TmdbCertifications(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get an up to date list of the officially supported movie certifications on TMDB.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/certification-movie-list">documentation</a> for more info.</p>
     *
     * @return The movie certifications.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public CertificationResults getMovieCertifications() throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_CERTIFICATIONS, TMDB_METHOD_MOVIE_CERTIFICATIONS);
        return mapJsonResult(apiUrl, CertificationResults.class);
    }

    /**
     * <p>Get an up to date list of the officially supported tv certifications on TMDB.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/certifications-tv-list">documentation</a> for more info.</p>
     *
     * @return The tv certifications.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public CertificationResults getTvCertifications() throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_CERTIFICATIONS, TMDB_METHOD_TV_CERTIFICATIONS);
        return mapJsonResult(apiUrl, CertificationResults.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbChanges.java
================================================
package info.movito.themoviedbapi;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

import info.movito.themoviedbapi.model.changes.ChangesResultsPage;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;

/**
 * The movie database api for changes. See the
 * <a href="https://developer.themoviedb.org/reference/changes-movie-list">documentation</a> for more info.
 */
public class TmdbChanges extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_CHANGES = "changes";

    protected static final String TMDB_METHOD_MOVIE = "movie";

    protected static final String TMDB_METHOD_PERSON = "person";

    protected static final String TMDB_METHOD_TV = "tv";

    /**
     * Create a new TmdbChanges instance to call the changes related TMDb API methods.
     */
    TmdbChanges(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get a list of all the movie ids that have been changed in the past 24 hours.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/changes-movie-list">documentation</a> for more info.</p>
     *
     * @param startDate nullable - The start date, in format: YYYY-MM-DD.
     * @param endDate   nullable - The end date, in format: YYYY-MM-DD.
     * @param page      nullable - The page of results to return. Default: 1.
     * @return The changes results page.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ChangesResultsPage getMovieChangesList(String startDate, String endDate, Integer page) throws TmdbException {
        if (calculateDaysDifference(startDate, endDate) > 14) {
            throw new IllegalArgumentException("The date range must be less than or equal to 14 days.");
        }

        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, TMDB_METHOD_CHANGES)
            .addQueryParam("start_date", startDate)
            .addQueryParam("end_date", endDate)
            .addPage(page);

        return mapJsonResult(apiUrl, ChangesResultsPage.class);
    }

    /**
     * <p>Get a list of all the people ids that have been changed in the past 24 hours.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/changes-people-list">documentation</a> for more info.</p>
     *
     * @param startDate nullable - The start date, in format: YYYY-MM-DD.
     * @param endDate   nullable - The end date, in format: YYYY-MM-DD.
     * @param page      nullable - The page of results to return. Default: 1.
     * @return The changes results page.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ChangesResultsPage getPeopleChangesList(String startDate, String endDate, Integer page) throws TmdbException {
        if (calculateDaysDifference(startDate, endDate) > 14) {
            throw new IllegalArgumentException("The date range must be less than or equal to 14 days.");
        }

        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_PERSON, TMDB_METHOD_CHANGES)
            .addQueryParam("start_date", startDate)
            .addQueryParam("end_date", endDate)
            .addPage(page);

        return mapJsonResult(apiUrl, ChangesResultsPage.class);
    }

    /**
     * <p>Get a list of all the tv ids that have been changed in the past 24 hours.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/changes-tv-list">documentation</a> for more info.</p>
     *
     * @param startDate nullable - The start date, in format: YYYY-MM-DD.
     * @param endDate   nullable - The end date, in format: YYYY-MM-DD.
     * @param page      nullable - The page of results to return. Default: 1.
     * @return nullable - The changes results page.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ChangesResultsPage getTvChangesList(String startDate, String endDate, Integer page) throws TmdbException {
        if (calculateDaysDifference(startDate, endDate) > 14) {
            throw new IllegalArgumentException("The date range must be less than or equal to 14 days.");
        }

        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV, TMDB_METHOD_CHANGES)
            .addQueryParam("start_date", startDate)
            .addQueryParam("end_date", endDate)
            .addPage(page);

        return mapJsonResult(apiUrl, ChangesResultsPage.class);
    }

    /**
     * Calculate the difference in days between two date strings.
     *
     * @param startDateString the start date string, in format: YYYY-MM-DD.
     * @param endDateString   the end date string, in format: YYYY-MM-DD.
     * @return the difference in days.
     */
    private static long calculateDaysDifference(String startDateString, String endDateString) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate startDate = LocalDate.parse(startDateString, formatter);
        LocalDate endDate = LocalDate.parse(endDateString, formatter);

        return ChronoUnit.DAYS.between(startDate, endDate);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbCollections.java
================================================
package info.movito.themoviedbapi;

import java.util.List;

import info.movito.themoviedbapi.model.collections.CollectionInfo;
import info.movito.themoviedbapi.model.collections.Images;
import info.movito.themoviedbapi.model.collections.Translation;
import info.movito.themoviedbapi.model.collections.Translations;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;

/**
 * The movie database api for collections. See the
 * <a href="https://developer.themoviedb.org/reference/collection-details">documentation</a> for more info.
 */
public class TmdbCollections extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_COLLECTION = "collection";

    /**
     * Create a new TmdbCollections instance to call the collections related TMDb API methods.
     */
    TmdbCollections(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get collection details by ID.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/collection-details">documentation</a> for more info.</p>
     *
     * @param collectionId The collection id.
     * @param language     nullable - The language to query the results in. Default: en-US.
     * @return The collection info.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public CollectionInfo getDetails(Integer collectionId, String language) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_COLLECTION, collectionId)
            .addLanguage(language);
        return mapJsonResult(apiUrl, CollectionInfo.class);
    }

    /**
     * <p>Get the images that belong to a collection.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/collection-images">documentation</a> for more info.</p>
     *
     * @param collectionId         The collection id.
     * @param language             nullable - The language to query the results in. Default: en-US.
     * @param includeImageLanguage nullable - Specify a comma separated list of ISO-639-1 values to query, for example: en,it
     * @return The images.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public Images getImages(Integer collectionId, String language, String... includeImageLanguage) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_COLLECTION, collectionId, "images")
            .addLanguage(language)
            .addQueryParamCommandSeparated("include_image_language", includeImageLanguage);
        return mapJsonResult(apiUrl, Images.class);
    }

    /**
     * <p>Get all translations for a collection.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/collection-translations">documentation</a> for more info.</p>
     *
     * @param collectionId The collection id.
     * @return The translations.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public List<Translation> getTranslations(Integer collectionId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_COLLECTION, collectionId, "translations");
        return mapJsonResult(apiUrl, Translations.class).getTranslations();
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbCompanies.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.companies.AlternativeNamesResultsPage;
import info.movito.themoviedbapi.model.companies.Company;
import info.movito.themoviedbapi.model.core.image.ImageResults;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;

/**
 * The movie database api for companies. See the
 * <a href="https://developer.themoviedb.org/reference/company-details">documentation</a> for more info.
 */
public class TmdbCompanies extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_COMPANY = "company";

    /**
     * Create a new TmdbCompany instance to call the company related TMDb API methods.
     */
    TmdbCompanies(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get the company details by ID.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/company-details">documentation</a> for more info.</p>
     *
     * @param companyId The company ID
     * @return The company details
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public Company getDetails(Integer companyId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_COMPANY, companyId);
        return mapJsonResult(apiUrl, Company.class);
    }

    /**
     * <p>Gets the alternative company names by ID.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/company-alternative-names">documentation</a> for more info.</p>
     *
     * @param companyId The company ID
     * @return The alternative company names
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public AlternativeNamesResultsPage getAlternativeNames(Integer companyId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_COMPANY, companyId, "alternative_names");
        return mapJsonResult(apiUrl, AlternativeNamesResultsPage.class);
    }

    /**
     * <p>Get the company logos by ID.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/company-images">documentation</a> for more info.</p>
     *
     * @param companyId The company ID
     * @return The company logos
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ImageResults getImages(Integer companyId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_COMPANY, companyId, "images");
        return mapJsonResult(apiUrl, ImageResults.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbConfiguration.java
================================================
package info.movito.themoviedbapi;

import java.util.List;

import com.fasterxml.jackson.core.type.TypeReference;
import info.movito.themoviedbapi.model.configuration.Configuration;
import info.movito.themoviedbapi.model.configuration.Country;
import info.movito.themoviedbapi.model.configuration.Job;
import info.movito.themoviedbapi.model.configuration.Timezone;
import info.movito.themoviedbapi.model.core.Language;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;

/**
 * The movie database api for configuration. See the
 * <a href="https://developer.themoviedb.org/reference/configuration-details">documentation</a> for more info.
 */
public class TmdbConfiguration extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_CONFIGURATION = "configuration";

    /**
     * Create a new TmdbConfig instance to call the config related TMDb API methods.
     */
    TmdbConfiguration(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Query the API configuration details.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/configuration-details">documentation</a> for more info.</p>
     *
     * @return The configuration details
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public Configuration getDetails() throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_CONFIGURATION);
        return mapJsonResult(apiUrl, Configuration.class);
    }

    /**
     * <p>Get the list of countries (ISO 3166-1 tags) used throughout TMDB.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/configuration-countries">documentation</a> for more info.</p>
     *
     * @param language nullable - The language to query the results in. Default: en-US.
     * @return The configuration details
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public List<Country> getCountries(String language) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_CONFIGURATION, "countries")
            .addLanguage(language);
        return mapJsonResult(apiUrl, new TypeReference<>() {
        });
    }

    /**
     * <p>Get the list of jobs and departments we use on TMDb.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/configuration-jobs">documentation</a> for more info.</p>
     *
     * @return The list of jobs and departments
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public List<Job> getJobs() throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_CONFIGURATION, "jobs");
        return mapJsonResult(apiUrl, new TypeReference<>() {
        });
    }

    /**
     * <p>Get the list of languages (ISO 639-1 tags) used throughout TMDB.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/configuration-languages">documentation</a> for more info.</p>
     *
     * @return The list of languages
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public List<Language> getLanguages() throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_CONFIGURATION, "languages");
        return mapJsonResult(apiUrl, new TypeReference<>() {
        });
    }

    /**
     * <p>Get the list of languages (ISO 639-1 tags) used throughout TMDB.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/configuration-primary-translations">documentation</a>
     * for more info.</p>
     *
     * @return The list of languages
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public List<String> getPrimaryTranslations() throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_CONFIGURATION, "primary_translations");
        return mapJsonResult(apiUrl, new TypeReference<>() {
        });
    }

    /**
     * <p>Get the list of timezones used throughout TMDB.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/configuration-timezones">documentation</a> for more info.</p>
     *
     * @return The list of timezones
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public List<Timezone> getTimezones() throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_CONFIGURATION, "timezones");
        return mapJsonResult(apiUrl, new TypeReference<>() {
        });
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbDiscover.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.core.MovieResultsPage;
import info.movito.themoviedbapi.model.core.TvSeriesResultsPage;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;
import info.movito.themoviedbapi.tools.builders.discover.DiscoverMovieParamBuilder;
import info.movito.themoviedbapi.tools.builders.discover.DiscoverTvParamBuilder;

/**
 * The movie database api for discover. See the
 * <a href="https://developer.themoviedb.org/reference/discover-movie">documentation</a> for more info.
 */
public class TmdbDiscover extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_DISCOVER = "discover";
    protected static final String TMDB_METHOD_MOVIE = "movie";
    protected static final String TMDB_METHOD_TV = "tv";

    /**
     * Create a new TmdbDiscover instance to call the discover related TMDb API methods.
     */
    TmdbDiscover(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Find movies using over 30 filters and sort options.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/discover-movie">documentation</a> for more info.</p>
     *
     * @param builder A discover object containing the search criteria wanted
     * @return the movie results page.
     */
    public MovieResultsPage getMovie(DiscoverMovieParamBuilder builder) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_DISCOVER, TMDB_METHOD_MOVIE)
            .addPathParams(builder);
        return mapJsonResult(apiUrl, MovieResultsPage.class);
    }

    /**
     * <p>Find TV shows using over 30 filters and sort options.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/discover-tv">documentation</a> for more info.</p>
     *
     * @param builder A discover object containing the search criteria wanted
     * @return the tv series results page.
     */
    public TvSeriesResultsPage getTv(DiscoverTvParamBuilder builder) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_DISCOVER, TMDB_METHOD_TV)
            .addPathParams(builder);
        return mapJsonResult(apiUrl, TvSeriesResultsPage.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbFind.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.find.FindResults;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;
import info.movito.themoviedbapi.tools.model.time.ExternalSource;

/**
 * The movie database api for find. See the
 * <a href="https://developer.themoviedb.org/reference/find-by-id">documentation</a> for more info.
 */
public class TmdbFind extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_FIND = "find";

    /**
     * Create a new TmdbFind instance to call the find related TMDb API methods.
     */
    TmdbFind(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Find data by external ID's.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/find-by-id">documentation</a> for more info.</p>
     *
     * @param externalId     The external id of the movie, TV show or people.
     * @param externalSource The external source of the id.
     * @param language       nullable - The language to query the results in. Default: en-US.
     * @return The find results
     */
    public FindResults findById(String externalId, ExternalSource externalSource, String language) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_FIND, externalId)
            .addPathParam("external_source", externalSource.getValue())
            .addLanguage(language);
        return mapJsonResult(apiUrl, FindResults.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbGenre.java
================================================
package info.movito.themoviedbapi;

import java.util.List;

import info.movito.themoviedbapi.model.core.Genre;
import info.movito.themoviedbapi.model.core.Genres;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;

/**
 * The movie database api for genre. See the
 * <a href="https://developer.themoviedb.org/reference/genre-movie-list">documentation</a> for more info.
 */
public class TmdbGenre extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_GENRE = "genre";

    /**
     * Create a new TmdbGenre instance to call the genre related TMDb API methods.
     */
    public TmdbGenre(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get the list of official genres for movies.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/genre-movie-list">documentation</a> for more info.</p>
     *
     * @param language nullable - The language to query the results in. Default: en-US.
     * @return The list of official genres for movies.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public List<Genre> getMovieList(String language) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_GENRE, "movie/list")
            .addLanguage(language);
        return mapJsonResult(apiUrl, Genres.class).getGenres();
    }

    /**
     * <p>Get the list of official genres for TV shows.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/genre-tv-list">documentation</a> for more info.</p>
     *
     * @param language nullable - The language to query the results in. Default: en-US.
     * @return The list of official genres for movies.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public List<Genre> getTvList(String language) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_GENRE, "tv/list")
            .addLanguage(language);
        return mapJsonResult(apiUrl, Genres.class).getGenres();
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbGuestSessions.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.rated.RatedMovieResultsPage;
import info.movito.themoviedbapi.model.rated.RatedTvEpisodeResultsPage;
import info.movito.themoviedbapi.model.rated.RatedTvSeriesResultsPage;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;
import info.movito.themoviedbapi.tools.sortby.AccountSortBy;

/**
 * The movie database api for guest sessions. See the
 * <a href="https://developer.themoviedb.org/reference/guest-session-rated-movies">documentation</a> for more info.
 */
public class TmdbGuestSessions extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_GUEST_SESSIONS = "guest_session";

    /**
     * Create a new TmdbGuestSessions instance to call the guest sessions related TMDb API methods.
     */
    public TmdbGuestSessions(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get the rated movies for a guest session.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/guest-session-rated-movies">documentation</a> for more info.</p>
     *
     * @param guestSessionId The guest session id of the user.
     * @param language       nullable - The language to query the results in. Default: en-US.
     * @param page           nullable - The page of results to return. Default: 1.
     * @param sortBy         nullable - The sort order of the results.
     * @return The rated movies of the user.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public RatedMovieResultsPage getRatedMovies(int guestSessionId, String language, Integer page,
                                                AccountSortBy sortBy) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_GUEST_SESSIONS, guestSessionId, "rated/movies")
            .addLanguage(language)
            .addPage(page)
            .addSortBy(sortBy);

        return mapJsonResult(apiUrl, RatedMovieResultsPage.class);
    }

    /**
     * <p>Get the rated tv shows for a guest session.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/guest-session-rated-tv">documentation</a> for more info.</p>
     *
     * @param guestSessionId The guest session id of the user.
     * @param language       nullable - The language to query the results in. Default: en-US.
     * @param page           nullable - The page of results to return. Default: 1.
     * @param sortBy         nullable - The sort order of the results.
     * @return The rated tv series of the user.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public RatedTvSeriesResultsPage getRatedTvSeries(int guestSessionId, String language, Integer page,
                                                     AccountSortBy sortBy) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_GUEST_SESSIONS, guestSessionId, "rated/tv")
            .addLanguage(language)
            .addPage(page)
            .addSortBy(sortBy);

        return mapJsonResult(apiUrl, RatedTvSeriesResultsPage.class);
    }

    /**
     * <p>Get the rated tv episodes for a guest session.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/guest-session-rated-tv-episodes">documentation</a> for more info.</p>
     *
     * @param guestSessionId The guest session id of the user.
     * @param language       nullable - The language to query the results in. Default: en-US.
     * @param page           nullable - The page of results to return. Default: 1.
     * @param sortBy         nullable - The sort order of the results.
     * @return The rated tv episodes of the user.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public RatedTvEpisodeResultsPage getRatedTvEpisodes(int guestSessionId, String language, Integer page,
                                                        AccountSortBy sortBy) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_GUEST_SESSIONS, guestSessionId, "rated/tv/episodes")
            .addLanguage(language)
            .addPage(page)
            .addSortBy(sortBy);

        return mapJsonResult(apiUrl, RatedTvEpisodeResultsPage.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbKeywords.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.core.MovieDbResultsPage;
import info.movito.themoviedbapi.model.keywords.Keyword;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;
import info.movito.themoviedbapi.tools.builders.discover.DiscoverMovieParamBuilder;

/**
 * The movie database api for keywords. See the
 * <a href="https://developer.themoviedb.org/reference/keyword-details">documentation</a> for more info.
 */
public class TmdbKeywords extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_KEYWORD = "keyword";

    /**
     * Create a new TmdbKeywords instance to call the keywords TMDb API methods.
     */
    TmdbKeywords(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get the details for a specific keyword.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/keyword-details">documentation</a> for more info.</p>
     *
     * @param keywordId The keyword id.
     * @return The keyword details.
     */
    public Keyword getDetails(int keywordId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_KEYWORD, keywordId);
        return mapJsonResult(apiUrl, Keyword.class);
    }

    /**
     * Get the list of movies for a particular keyword by id.
     *
     * @return List of movies with the keyword
     * @deprecated use {@link TmdbDiscover#getMovie(DiscoverMovieParamBuilder)} instead.
     */
    @Deprecated
    public MovieDbResultsPage getKeywordMovies(String keywordId, String language, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_KEYWORD, keywordId, "movies")
            .addLanguage(language)
            .addPage(page);

        return mapJsonResult(apiUrl, MovieDbResultsPage.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbLists.java
================================================
package info.movito.themoviedbapi;

import java.util.HashMap;

import info.movito.themoviedbapi.model.core.responses.ResponseStatus;
import info.movito.themoviedbapi.model.lists.ListDetails;
import info.movito.themoviedbapi.model.lists.ListItemStatus;
import info.movito.themoviedbapi.model.lists.MovieListCreationStatus;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.RequestType;
import info.movito.themoviedbapi.tools.TmdbException;
import info.movito.themoviedbapi.util.JsonUtil;

/**
 * The movie database api for lists. See the
 * <a href="https://developer.themoviedb.org/reference/list-add-movie">documentation</a> for more info.
 */
public class TmdbLists extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_LIST = "list";

    /**
     * Create a new TmdbLists instance to call the lists TMDb API methods.
     */
    public TmdbLists(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Add a movie to a list.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/list-add-movie">documentation</a> for more info.</p>
     *
     * @param listId    The list id.
     * @param sessionId The session id.
     * @param movieId   The movie id.
     * @return The response status.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ResponseStatus addMovie(Integer listId, String sessionId, Integer movieId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_LIST, listId, "add_item")
            .addPathParam("session_id", sessionId);

        HashMap<String, Object> body = new HashMap<>();
        body.put("media_id", movieId);

        String jsonBody = JsonUtil.toJson(body);
        return mapJsonResult(apiUrl, jsonBody, RequestType.POST, ResponseStatus.class);
    }

    /**
     * <p>Use this method to check if an item has already been added to the list.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/list-check-item-status">documentation</a> for more info.</p>
     *
     * @param listId   The list id.
     * @param language nullable - The language to query the results in. Default: en-US.
     * @param movieId  nullable - The movie id.
     * @return The list item status.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ListItemStatus checkItemStatus(Integer listId, String language, Integer movieId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_LIST, listId, "item_status")
            .addLanguage(language)
            .addQueryParam("movie_id", movieId);
        return mapJsonResult(apiUrl, ListItemStatus.class);
    }

    /**
     * <p>Clear all items from a list.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/list-clear">documentation</a> for more info.</p>
     *
     * @param listId    The list id.
     * @param sessionId The session id.
     * @param confirm   Confirm the clear.
     * @return The response status.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ResponseStatus clear(Integer listId, String sessionId, Boolean confirm) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_LIST, listId, "clear")
            .addPathParam("session_id", sessionId)
            .addPathParam("confirm", confirm);
        return mapJsonResult(apiUrl, null, RequestType.POST, ResponseStatus.class);
    }

    /**
     * <p>Create a new list.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/list-create">documentation</a> for more info.</p>
     *
     * @param sessionId   The session id.
     * @param name        The name of the list.
     * @param description The description of the list.
     * @param language    nullable - The language to query the results in. Default: en-US.
     * @return The response status.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieListCreationStatus create(String sessionId, String name, String description, String language) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_LIST)
            .addPathParam("session_id", sessionId);

        HashMap<String, Object> body = new HashMap<>();
        body.put("name", name);
        body.put("description", description);
        body.put("language", language);

        String jsonBody = JsonUtil.toJson(body);
        return mapJsonResult(apiUrl, jsonBody, RequestType.POST, MovieListCreationStatus.class);
    }

    /**
     * <p>Delete a list.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/list-delete">documentation</a> for more info.</p>
     *
     * @param listId    The list id.
     * @param sessionId The session id.
     * @return The response status.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ResponseStatus delete(Integer listId, String sessionId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_LIST, listId)
            .addPathParam("session_id", sessionId);
        return mapJsonResult(apiUrl, null, RequestType.DELETE, ResponseStatus.class);
    }

    /**
     * <p>Get the details of a list.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/list-details">documentation</a> for more info.</p>
     *
     * @param listId   The list id.
     * @param language nullable - The language to query the results in. Default: en-US.
     * @param page     nullable - The page of results to return. Default: 1.
     * @return The movie list.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ListDetails getDetails(Integer listId, String language, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_LIST, listId)
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, ListDetails.class);
    }

    /**
     * <p>Remove a movie from a list.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/list-remove-movie">documentation</a> for more info.</p>
     *
     * @param listId    The list id.
     * @param sessionId The session id.
     * @param movieId   The movie id.
     * @return The response status.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ResponseStatus removeMovie(Integer listId, String sessionId, Integer movieId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_LIST, listId, "remove_item")
            .addPathParam("session_id", sessionId);

        HashMap<String, Object> body = new HashMap<>();
        body.put("media_id", movieId);

        String jsonBody = JsonUtil.toJson(body);
        return mapJsonResult(apiUrl, jsonBody, RequestType.POST, ResponseStatus.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbMovieLists.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.core.MovieResultsPage;
import info.movito.themoviedbapi.model.movielists.MovieResultsPageWithDates;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;

/**
 * The movie database api for movie lists. See the
 * <a href="https://developer.themoviedb.org/reference/movie-now-playing-list">documentation</a> for more info.
 */
public class TmdbMovieLists extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_MOVIE_LISTS = "movie";

    /**
     * Create a new TmdbMovieLists instance to call the movie lists related TMDb API methods.
     */
    TmdbMovieLists(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get a list of movies that are currently in theatres.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-now-playing-list">documentation</a> for more info.</p>
     *
     * @param language nullable - The language to query the results in. Default: en-US.
     * @param page     nullable - The page of results to return. Default: 1.
     * @param region   nullable - The region (ISO-3166-1 code) to display the results for. e.g. "US".
     * @return The now playing movies.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieResultsPageWithDates getNowPlaying(String language, Integer page, String region) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE_LISTS, "now_playing")
            .addLanguage(language)
            .addPage(page)
            .addQueryParam("region", region);
        return mapJsonResult(apiUrl, MovieResultsPageWithDates.class);
    }

    /**
     * <p>Get a list of movies ordered by popularity.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-popular-list">documentation</a> for more info.</p>
     *
     * @param language nullable - The language to query the results in. Default: en-US.
     * @param page     nullable - The page of results to return. Default: 1.
     * @param region   nullable - The region (ISO-3166-1 code) to display the results for. e.g. "US".
     * @return The popular movies.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieResultsPage getPopular(String language, Integer page, String region) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE_LISTS, "popular")
            .addLanguage(language)
            .addPage(page)
            .addQueryParam("region", region);
        return mapJsonResult(apiUrl, MovieResultsPage.class);
    }

    /**
     * <p>Get a list of movies ordered by rating.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-top-rated-list">documentation</a> for more info.</p>
     *
     * @param language nullable - The language to query the results in. Default: en-US.
     * @param page     nullable - The page of results to return. Default: 1.
     * @param region   nullable - The region (ISO-3166-1 code) to display the results for. e.g. "US".
     * @return The top-rated movies.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieResultsPage getTopRated(String language, Integer page, String region) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE_LISTS, "top_rated")
            .addLanguage(language)
            .addPage(page)
            .addQueryParam("region", region);
        return mapJsonResult(apiUrl, MovieResultsPage.class);
    }

    /**
     * <p>Get a list of movies that are being released soon.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-upcoming-list">documentation</a> for more info.</p>
     *
     * @param language nullable - The language to query the results in. Default: en-US.
     * @param page     nullable - The page of results to return. Default: 1.
     * @param region   nullable - The region (ISO-3166-1 code) to display the results for. e.g. "US".
     * @return The upcoming movies.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieResultsPageWithDates getUpcoming(String language, Integer page, String region) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE_LISTS, "upcoming")
            .addLanguage(language)
            .addPage(page)
            .addQueryParam("region", region);
        return mapJsonResult(apiUrl, MovieResultsPageWithDates.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbMovies.java
================================================
package info.movito.themoviedbapi;

import java.util.HashMap;

import info.movito.themoviedbapi.model.core.AccountStates;
import info.movito.themoviedbapi.model.core.MovieResultsPage;
import info.movito.themoviedbapi.model.core.ReviewResultsPage;
import info.movito.themoviedbapi.model.core.responses.ResponseStatus;
import info.movito.themoviedbapi.model.core.video.VideoResults;
import info.movito.themoviedbapi.model.core.watchproviders.ProviderResults;
import info.movito.themoviedbapi.model.movies.AlternativeTitles;
import info.movito.themoviedbapi.model.movies.Credits;
import info.movito.themoviedbapi.model.movies.ExternalIds;
import info.movito.themoviedbapi.model.movies.Images;
import info.movito.themoviedbapi.model.movies.KeywordResults;
import info.movito.themoviedbapi.model.movies.MovieDb;
import info.movito.themoviedbapi.model.movies.MovieListResultsPage;
import info.movito.themoviedbapi.model.movies.ReleaseDateResults;
import info.movito.themoviedbapi.model.movies.Translations;
import info.movito.themoviedbapi.model.movies.changes.ChangeResults;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.RequestType;
import info.movito.themoviedbapi.tools.TmdbException;
import info.movito.themoviedbapi.tools.appendtoresponse.MovieAppendToResponse;
import info.movito.themoviedbapi.util.JsonUtil;

/**
 * The movie database api for movies. See the
 * <a href="https://developer.themoviedb.org/reference/movie-details">documentation</a> for more info.
 */
public class TmdbMovies extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_MOVIE = "movie";

    /**
     * Create a new TmdbMovies instance to call the movie related TMDb API methods.
     */
    public TmdbMovies(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get the top level details of a movie by ID.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-details">documentation</a> for more info.</p>
     *
     * @param movieId          The TMDb id of the movie.
     * @param language         nullable - The language to query the results in. Default: en-US.
     * @param appendToResponse nullable - additional namespaces to append to the result (20 max).
     * @return The movie details.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieDb getDetails(int movieId, String language, MovieAppendToResponse... appendToResponse) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId)
            .addLanguage(language)
            .addAppendToResponses(appendToResponse);
        return mapJsonResult(apiUrl, MovieDb.class);
    }

    /**
     * <p>Get the rating, watchlist and favourite status of an account.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-account-states">documentation</a> for more info.</p>
     *
     * @param movieId        The TMDb id of the movie.
     * @param sessionId      nullable - The session id of the user.
     * @param guestSessionId nullable - The guest session id of the user.
     * @return The account states of the movie.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public AccountStates getAccountStates(int movieId, String sessionId, String guestSessionId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "account_states")
            .addQueryParam("session_id", sessionId)
            .addQueryParam("guest_session_id", guestSessionId);
        return mapJsonResult(apiUrl, AccountStates.class);
    }

    /**
     * <p>Get the alternative titles for a movie.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-alternative-titles">documentation</a> for more info.</p>
     *
     * @param movieId The TMDb id of the movie.
     * @param country nullable - The country to query the results in (ISO-3166-1), e.g. "US".
     * @return The alternative titles of the movie.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public AlternativeTitles getAlternativeTitles(int movieId, String country) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "alternative_titles")
            .addQueryParam("country", country);
        return mapJsonResult(apiUrl, AlternativeTitles.class);
    }

    /**
     * <p>Get the recent changes for a movie.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-changes">documentation</a> for more info.</p>
     *
     * @param movieId   The TMDb id of the movie.
     * @param startDate nullable - The start date, in format: YYYY-MM-DD.
     * @param endDate   nullable - The end date, in format: YYYY-MM-DD.
     * @param page      nullable - The page of results to return. Default: 1.
     * @return The movie changes.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ChangeResults getChanges(int movieId, String startDate, String endDate, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "changes")
            .addQueryParam("start_date", startDate)
            .addQueryParam("end_date", endDate)
            .addPage(page);
        return mapJsonResult(apiUrl, ChangeResults.class);
    }

    /**
     * <p>Get the credits for a movie.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-credits">documentation</a> for more info.</p>
     *
     * @param movieId  The TMDb id of the movie.
     * @param language nullable - The language to query the results in. Default: en-US.
     * @return The movie credits.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public Credits getCredits(int movieId, String language) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "credits")
            .addLanguage(language);
        return mapJsonResult(apiUrl, Credits.class);
    }

    /**
     * <p>Get the external ID's for a movie.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-external-ids">documentation</a> for more info.</p>
     *
     * @param movieId The TMDb id of the movie.
     * @return The external IDs.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ExternalIds getExternalIds(int movieId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "external_ids");
        return mapJsonResult(apiUrl, ExternalIds.class);
    }

    /**
     * <p>Get the images that belong to a movie.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-images">documentation</a> for more info.</p>
     *
     * @param movieId              The movie id.
     * @param language             nullable - The language to query the results in. Default: en-US.
     * @param includeImageLanguage nullable - Specify a comma separated list of ISO-639-1 values to query, for example: en,it
     * @return The images.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public Images getImages(int movieId, String language, String... includeImageLanguage) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "images")
            .addLanguage(language)
            .addQueryParamCommandSeparated("include_image_language", includeImageLanguage);
        return mapJsonResult(apiUrl, Images.class);
    }

    /**
     * <p>Get the keywords that belong to a movie.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-keywords">documentation</a> for more info.</p>
     *
     * @param movieId The movie id.
     * @return The keywords.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public KeywordResults getKeywords(int movieId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "keywords");
        return mapJsonResult(apiUrl, KeywordResults.class);
    }

    /**
     * <p>Get the newest movie ID.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-latest-id">documentation</a> for more info.</p>
     *
     * @return The latest movie.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieDb getLatest() throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, "latest");
        return mapJsonResult(apiUrl, MovieDb.class);
    }

    /**
     * <p>Get the lists that a movie has been added to.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-lists">documentation</a> for more info.</p>
     *
     * @param movieId  The TMDb id of the movie.
     * @param language nullable - The language to query the results in. Default: en-US.
     * @param page     nullable - The page of results to return. Default: 1.
     * @return The movie lists.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieListResultsPage getLists(int movieId, String language, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "lists")
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, MovieListResultsPage.class);
    }

    /**
     * <p>Get the recommendations for a movie.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-recommendations">documentation</a> for more info.</p>
     *
     * @param movieId  The TMDb id of the movie.
     * @param language nullable - The language to query the results in. Default: en-US.
     * @param page     nullable - The page of results to return. Default: 1.
     * @return The recommended movies.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieResultsPage getRecommendations(int movieId, String language, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "recommendations")
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, MovieResultsPage.class);
    }

    /**
     * <p>Get the release dates and certifications for a movie.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-release-dates">documentation</a> for more info.</p>
     *
     * @param movieId The TMDb id of the movie.
     * @return The release dates and certifications.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ReleaseDateResults getReleaseDates(int movieId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "release_dates");
        return mapJsonResult(apiUrl, ReleaseDateResults.class);
    }

    /**
     * <p>Get the user reviews for a movie.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-reviews">documentation</a> for more info.</p>
     *
     * @param movieId  The TMDb id of the movie.
     * @param language nullable - The language to query the results in. Default: en-US.
     * @param page     nullable - The page of results to return. Default: 1.
     * @return The movie reviews.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ReviewResultsPage getReviews(int movieId, String language, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "reviews")
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, ReviewResultsPage.class);
    }

    /**
     * <p>Get the similar movies based on genres and keywords.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-similar">documentation</a> for more info.</p>
     *
     * @param movieId  The TMDb id of the movie.
     * @param language nullable - The language to query the results in. Default: en-US.
     * @param page     nullable - The page of results to return. Default: 1.
     * @return The similar movies.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieResultsPage getSimilar(int movieId, String language, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "similar")
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, MovieResultsPage.class);
    }

    /**
     * <p>Get the translations for a movie.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-translations">documentation</a> for more info.</p>
     *
     * @param movieId The TMDb id of the movie.
     * @return The translations.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public Translations getTranslations(int movieId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "translations");
        return mapJsonResult(apiUrl, Translations.class);
    }

    /**
     * <p>Get the videos that have been added to a movie.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-videos">documentation</a> for more info.</p>
     *
     * @param movieId  The TMDb id of the movie.
     * @param language nullable - The language to query the results in. Default: en-US.
     * @return The videos.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public VideoResults getVideos(int movieId, String language) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "videos")
            .addLanguage(language);
        return mapJsonResult(apiUrl, VideoResults.class);
    }

    /**
     * <p>Get the list of streaming providers we have for a movie.</p>
     * <p>In order to use this data you must attribute the source of the data as JustWatch. If TMDb find any usage not complying with these
     * terms TMDb will revoke access to the API.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-watch-providers">documentation</a> for more info.</p>
     *
     * @param movieId The TMDb id of the movie.
     * @return The watch providers.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ProviderResults getWatchProviders(int movieId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "watch/providers");
        return mapJsonResult(apiUrl, ProviderResults.class);
    }

    /**
     * <p>Rate a movie and save it to your rated list.</p>
     * <p>Note: if no <code>guestSessionId</code> or <code>sessionId</code> are provided, the method will add the rating to the API key
     * holder's account.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-add-rating">documentation</a> for more info.</p>
     *
     * @param movieId        The TMDb id of the movie.
     * @param guestSessionId nullable - The guest session id of the user.
     * @param sessionId      nullable - The session id of the user.
     * @param rating         The rating of the movie. Must be: 0 &lt; rating &le; 10.
     * @return The response status.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ResponseStatus addRating(int movieId, String guestSessionId, String sessionId, double rating) throws TmdbException {
        if (rating < 0 || rating > 10) {
            throw new IllegalArgumentException("Rating must be: 0 < rating <= 10");
        }

        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "rating")
            .addQueryParam("session_id", sessionId)
            .addQueryParam("guest_session_id", guestSessionId);

        HashMap<String, Object> body = new HashMap<>();
        body.put("value", rating);

        String jsonBody = JsonUtil.toJson(body);
        return mapJsonResult(apiUrl, jsonBody, RequestType.POST, ResponseStatus.class);
    }

    /**
     * <p>Delete a user rating.</p>
     * <p>Note: if no <code>guestSessionId</code> or <code>sessionId</code> are provided, the method will delete the rating for the API key
     * holder's account.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/movie-delete-rating">documentation</a> for more info.</p>
     *
     * @param movieId        The TMDb id of the movie.
     * @param guestSessionId nullable - The guest session id of the user.
     * @param sessionId      nullable - The session id of the user.
     * @return The response status.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ResponseStatus deleteRating(int movieId, String guestSessionId, String sessionId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE, movieId, "rating")
            .addQueryParam("session_id", sessionId)
            .addQueryParam("guest_session_id", guestSessionId);
        return mapJsonResult(apiUrl, null, RequestType.DELETE, ResponseStatus.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbNetworks.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.core.image.ImageResults;
import info.movito.themoviedbapi.model.networks.AlternativeNamesResults;
import info.movito.themoviedbapi.model.networks.Network;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;

/**
 * The movie database api for networks. See the
 * <a href="https://developer.themoviedb.org/reference/network-details">documentation</a> for more info.
 */
public class TmdbNetworks extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_NETWORK = "network";

    /**
     * Create a new TmdbNetworks instance to call the network related TMDb API methods.
     */
    public TmdbNetworks(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get the details of a network.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/network-details">documentation</a> for more info.</p>
     *
     * @param networkId The network id.
     * @return The network details.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public Network getDetails(int networkId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_NETWORK, networkId);
        return mapJsonResult(apiUrl, Network.class);
    }

    /**
     * <p>Get the alternative names of a network.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/details-copy">documentation</a> for more info.</p>
     *
     * @param networkId The network id.
     * @return The alternative names of the network.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public AlternativeNamesResults getAlternativeNames(int networkId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_NETWORK, networkId, "alternative_names");
        return mapJsonResult(apiUrl, AlternativeNamesResults.class);
    }

    /**
     * <p>Get the images of a network.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/alternative-names-copy">documentation</a> for more info.</p>
     *
     * @param networkId The network id.
     * @return The images of the network.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ImageResults getImages(int networkId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_NETWORK, networkId, "images");
        return mapJsonResult(apiUrl, ImageResults.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbPeople.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.movies.changes.ChangeResults;
import info.movito.themoviedbapi.model.people.ExternalIds;
import info.movito.themoviedbapi.model.people.PersonDb;
import info.movito.themoviedbapi.model.people.PersonImages;
import info.movito.themoviedbapi.model.people.Translations;
import info.movito.themoviedbapi.model.people.credits.CombinedPersonCredits;
import info.movito.themoviedbapi.model.people.credits.MovieCredits;
import info.movito.themoviedbapi.model.people.credits.TvCredits;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;
import info.movito.themoviedbapi.tools.appendtoresponse.PersonAppendToResponse;

/**
 * The movie database api for people. See the
 * <a href="https://developer.themoviedb.org/reference/person-details">documentation</a> for more info.
 */
public class TmdbPeople extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_PERSON = "person";

    /**
     * Create a new TmdbPeople instance to call the people related TMDb API methods.
     */
    TmdbPeople(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Query the top level details of a person.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/person-details">documentation</a> for more info.</p>
     *
     * @param personId         The TMDb id of the person.
     * @param language         nullable - The language to query the results in. Default: en-US.
     * @param appendToResponse nullable - additional namespaces to append to the result (20 max).
     * @return The person details.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public PersonDb getDetails(int personId, String language, PersonAppendToResponse... appendToResponse) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_PERSON, personId)
            .addLanguage(language)
            .addAppendToResponses(appendToResponse);
        return mapJsonResult(apiUrl, PersonDb.class);
    }

    /**
     * <p>Get the recent changes for a person.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/person-changes">documentation</a> for more info.</p>
     *
     * @param personId  The TMDb id of the person.
     * @param startDate nullable - The start date, in format: YYYY-MM-DD.
     * @param endDate   nullable - The end date, in format: YYYY-MM-DD.
     * @param page      nullable - The page of results to return. Default: 1.
     * @return The person changes.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ChangeResults getChanges(int personId, String startDate, String endDate, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_PERSON, personId, "changes")
            .addQueryParam("start_date", startDate)
            .addQueryParam("end_date", endDate)
            .addPage(page);
        return mapJsonResult(apiUrl, ChangeResults.class);
    }

    /**
     * <p>Get the combined movie and TV credits that belong to a person.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/person-combined-credits">documentation</a> for more info.</p>
     *
     * @param personId The TMDb id of the person.
     * @param language nullable - The language to query the results in. Default: en-US.
     * @return The combined person credits.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public CombinedPersonCredits getCombinedCredits(int personId, String language) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_PERSON, personId, "combined_credits")
            .addLanguage(language);
        return mapJsonResult(apiUrl, CombinedPersonCredits.class);
    }

    /**
     * <p>Get the external ID's that belong to a person.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/person-external-ids">documentation</a> for more info.</p>
     *
     * @param personId The TMDb id of the person.
     * @return The external IDs.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ExternalIds getExternalIds(int personId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_PERSON, personId, "external_ids");
        return mapJsonResult(apiUrl, ExternalIds.class);
    }

    /**
     * <p>Get the profile images that belong to a person.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/person-images">documentation</a> for more info.</p>
     *
     * @param personId The TMDb id of the person.
     * @return The profile images.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public PersonImages getImages(int personId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_PERSON, personId, "images");
        return mapJsonResult(apiUrl, PersonImages.class);
    }

    /**
     * <p>Get the newest created person. This is a live response and will continuously change.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/person-latest-id">documentation</a> for more info.</p>
     *
     * @return The latest person.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public PersonDb getLatest() throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_PERSON, "latest");
        return mapJsonResult(apiUrl, PersonDb.class);
    }

    /**
     * <p>Get the movie credits for a person.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/person-movie-credits">documentation</a> for more info.</p>
     *
     * @param personId The TMDb id of the person.
     * @param language nullable - The language to query the results in. Default: en-US.
     * @return The movie credits.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieCredits getMovieCredits(int personId, String language) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_PERSON, personId, "movie_credits")
            .addLanguage(language);
        return mapJsonResult(apiUrl, MovieCredits.class);
    }

    /**
     * <p>Get the TV credits that belong to a person..</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/person-tv-credits">documentation</a> for more info.</p>
     *
     * @param personId The TMDb id of the person.
     * @param language nullable - The language to query the results in. Default: en-US.
     * @return The TV credits.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public TvCredits getTvCredits(int personId, String language) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_PERSON, personId, "tv_credits")
            .addLanguage(language);
        return mapJsonResult(apiUrl, TvCredits.class);
    }

    /**
     * <p>Get the translations that belong to a person.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/translations">documentation</a> for more info.</p>
     *
     * @param personId The TMDb id of the person.
     * @return The translations.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public Translations getTranslations(int personId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_PERSON, personId, "translations");
        return mapJsonResult(apiUrl, Translations.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbPeopleLists.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.core.popularperson.PopularPersonResultsPage;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;

/**
 * The movie database api for people lists. See the
 * <a href="https://developer.themoviedb.org/reference/person-popular-list">documentation</a> for more info.
 */
public class TmdbPeopleLists extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_PEOPLE_LISTS = "person/popular";

    TmdbPeopleLists(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get a list of people ordered by popularity.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/person-popular-list">documentation</a> for more info.</p>
     *
     * @param language nullable - The language to query the results in. Default: en-US.
     * @param page     nullable - The page of results to return. Default: 1.
     * @return The popular people.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public PopularPersonResultsPage getPopular(String language, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_PEOPLE_LISTS)
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, PopularPersonResultsPage.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbReviews.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.reviews.Review;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;

/**
 * The movie database api for reviews. See the
 * <a href="https://developer.themoviedb.org/reference/review-details">documentation</a> for more info.
 */
public class TmdbReviews extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_MOVIE_REVIEW = "reviews";

    /**
     * Create a new TmdbReviews instance to call the reviews related TMDb API methods.
     */
    TmdbReviews(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get the details for a review.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/review-details">documentation</a> for more info.</p>
     *
     * @param reviewId The review id.
     * @return the reviews
     */
    public Review getDetails(int reviewId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_MOVIE_REVIEW, reviewId);
        return mapJsonResult(apiUrl, Review.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbSearch.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.core.MovieResultsPage;
import info.movito.themoviedbapi.model.core.TvSeriesResultsPage;
import info.movito.themoviedbapi.model.core.multi.MultiResultsPage;
import info.movito.themoviedbapi.model.core.popularperson.PopularPersonResultsPage;
import info.movito.themoviedbapi.model.search.CollectionResultsPage;
import info.movito.themoviedbapi.model.search.CompanyResultsPage;
import info.movito.themoviedbapi.model.search.KeywordResultsPage;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;

import static info.movito.themoviedbapi.TmdbCollections.TMDB_METHOD_COLLECTION;
import static info.movito.themoviedbapi.TmdbMovies.TMDB_METHOD_MOVIE;
import static info.movito.themoviedbapi.TmdbPeople.TMDB_METHOD_PERSON;
import static info.movito.themoviedbapi.TmdbTvSeries.TMDB_METHOD_TV;

/**
 * The movie database api for searching. See the
 * <a href="https://developer.themoviedb.org/reference/search-collection">documentation</a> for more info.
 */
public class TmdbSearch extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_SEARCH = "search";
    protected static final String TMDB_METHOD_MULTI = "multi";

    private static final String PARAM_QUERY = "query";

    /**
     * Create a new TmdbSearch instance to call the search TMDb API methods.
     */
    public TmdbSearch(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Search for collections by their original, translated and alternative names.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/search-collection">documentation</a> for more info.</p>
     *
     * @param query        The query to search for.
     * @param language     nullable - The language to query the results in. Default: en-US.
     * @param includeAdult nullable - Whether to include adult results in the search.
     * @param page         nullable - The page of results to return. Default: 1.
     * @param region       nullable - The region (ISO-3166-1 code) to display the results for. e.g. "US".
     * @return The collection results.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public CollectionResultsPage searchCollection(String query, String language, Boolean includeAdult, Integer page, String region)
        throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_SEARCH, TMDB_METHOD_COLLECTION)
            .addPathParam(PARAM_QUERY, query)
            .addQueryParam("include_adult", includeAdult)
            .addQueryParam("region", region)
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, CollectionResultsPage.class);
    }

    /**
     * <p>Search for companies by their original and alternative names.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/search-company">documentation</a> for more info.</p>
     *
     * @param query The query to search for.
     * @param page  nullable - The page of results to return. Default: 1.
     * @return The company results.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public CompanyResultsPage searchCompany(String query, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_SEARCH, "company")
            .addPathParam(PARAM_QUERY, query)
            .addPage(page);
        return mapJsonResult(apiUrl, CompanyResultsPage.class);
    }

    /**
     * <p>Search for keywords by their name.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/search-keyword">documentation</a> for more info.</p>
     *
     * @param query The query to search for.
     * @param page  nullable - The page of results to return. Default: 1.
     * @return The keyword results.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public KeywordResultsPage searchKeyword(String query, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_SEARCH, "keyword")
            .addPathParam(PARAM_QUERY, query)
            .addPage(page);
        return mapJsonResult(apiUrl, KeywordResultsPage.class);
    }

    /**
     * <p>Search for movies by their original, translated and alternative titles.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/search-movie">documentation</a> for more info.</p>
     *
     * @param query              The query to search for.
     * @param includeAdult       nullable - Whether to include adult results in the search.
     * @param language           nullable - The language to query the results in. Default: en-US.
     * @param primaryReleaseYear nullable - Filter the results so that only the primary release year matches this value.
     * @param page               nullable - The page of results to return. Default: 1.
     * @param region             nullable - The region (ISO-3166-1 code) to display the results for. e.g. "US".
     * @param year               nullable - Filter the results so that only the release year matches this value.
     * @return The movie results.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieResultsPage searchMovie(String query, Boolean includeAdult, String language, String primaryReleaseYear, Integer page,
                                        String region, String year) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_SEARCH, TMDB_METHOD_MOVIE)
            .addPathParam(PARAM_QUERY, query)
            .addQueryParam("include_adult", includeAdult)
            .addQueryParam("primary_release_year", primaryReleaseYear)
            .addQueryParam("region", region)
            .addQueryParam("year", year)
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, MovieResultsPage.class);
    }

    /**
     * <p>Use multi search when you want to search for movies, TV shows and people in a single request.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/search-multi">documentation</a> for more info.</p>
     *
     * @param query        The query to search for.
     * @param includeAdult nullable - Whether to include adult results in the search.
     * @param language     nullable - The language to query the results in. Default: en-US.
     * @param page         nullable - The page of results to return. Default: 1.
     * @return The multi results.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MultiResultsPage searchMulti(String query, Boolean includeAdult, String language, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_SEARCH, TMDB_METHOD_MULTI)
            .addPathParam(PARAM_QUERY, query)
            .addQueryParam("include_adult", includeAdult)
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, MultiResultsPage.class);
    }

    /**
     * <p>Search for people by their name and also known as names.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/search-person">documentation</a> for more info.</p>
     *
     * @param query        The query to search for.
     * @param includeAdult nullable - Whether to include adult results in the search.
     * @param language     nullable - The language to query the results in. Default: en-US.
     * @param page         nullable - The page of results to return. Default: 1.
     * @return The person results.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public PopularPersonResultsPage searchPerson(String query, Boolean includeAdult, String language, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_SEARCH, TMDB_METHOD_PERSON)
            .addPathParam(PARAM_QUERY, query)
            .addQueryParam("include_adult", includeAdult)
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, PopularPersonResultsPage.class);
    }

    /**
     * <p>Search for TV shows by their original, translated and also known as names.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/search-tv">documentation</a> for more info.</p>
     *
     * @param query            The query to search for.
     * @param firstAirDateYear nullable - Filter the results so that only the first air date year matches this value.
     * @param includeAdult     nullable - Whether to include adult results in the search.
     * @param language         nullable - The language to query the results in. Default: en-US.
     * @param page             nullable - The page of results to return. Default: 1.
     * @param year             nullable - Filter the results so that only the release year matches this value.
     * @return The TV series results.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public TvSeriesResultsPage searchTv(String query, Integer firstAirDateYear, Boolean includeAdult, String language, Integer page,
                                        Integer year) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_SEARCH, TMDB_METHOD_TV)
            .addPathParam(PARAM_QUERY, query)
            .addQueryParam("first_air_date_year", firstAirDateYear)
            .addQueryParam("include_adult", includeAdult)
            .addQueryParam("year", year)
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, TvSeriesResultsPage.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbTrending.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.core.MovieResultsPage;
import info.movito.themoviedbapi.model.core.TvSeriesResultsPage;
import info.movito.themoviedbapi.model.core.multi.MultiResultsPage;
import info.movito.themoviedbapi.model.core.popularperson.PopularPersonResultsPage;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;
import info.movito.themoviedbapi.tools.model.time.TimeWindow;

/**
 * The movie database api for trending media. See the
 * <a href="https://developer.themoviedb.org/reference/trending-all">documentation</a> for more info.
 */
public class TmdbTrending extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_TRENDING = "trending";

    /**
     * Create a new TmdbTrending instance to call the rending TMDb API methods.
     */
    TmdbTrending(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get the trending movies, TV shows and people.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/trending-all">documentation</a> for more info.</p>
     *
     * @param timeWindow The time window for the trending media.
     * @param language   nullable - The language to query the results in. Default: en-US.
     * @return The trending media.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MultiResultsPage getAll(TimeWindow timeWindow, String language) throws TmdbException {
        return getAll(timeWindow, language, 1);
    }

    /**
     * <p>Get the trending movies, TV shows and people.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/trending-all">documentation</a> for more info.</p>
     *
     * @param timeWindow The time window for the trending media.
     * @param language   nullable - The language to query the results in. Default: en-US.
     * @param page       nullable - The page of results to return. Default: 1.
     * @return The trending media.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MultiResultsPage getAll(TimeWindow timeWindow, String language, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TRENDING, "all", timeWindow.getValue())
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, MultiResultsPage.class);
    }

    /**
     * <p>Get the trending movies on TMDB.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/trending-movies">documentation</a> for more info.</p>
     *
     * @param timeWindow The time window for the trending movie.
     * @param language   nullable - The language to query the results in. Default: en-US.
     * @return The trending movies.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieResultsPage getMovies(TimeWindow timeWindow, String language) throws TmdbException {
        return getMovies(timeWindow, language, 1);
    }

    /**
     * <p>Get the trending movies on TMDB.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/trending-movies">documentation</a> for more info.</p>
     *
     * @param timeWindow The time window for the trending movie.
     * @param language   nullable - The language to query the results in. Default: en-US.
     * @param page       nullable - The page of results to return. Default: 1.
     * @return The trending movies.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public MovieResultsPage getMovies(TimeWindow timeWindow, String language, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TRENDING, "movie", timeWindow.getValue())
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, MovieResultsPage.class);
    }

    /**
     * <p>Get the trending people on TMDB.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/trending-people">documentation</a> for more info.</p>
     *
     * @param timeWindow The time window for the trending people.
     * @param language   nullable - The language to query the results in. Default: en-US.
     * @return The trending people.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public PopularPersonResultsPage getPeople(TimeWindow timeWindow, String language) throws TmdbException {
        return getPeople(timeWindow, language, 1);
    }

    /**
     * <p>Get the trending people on TMDB.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/trending-people">documentation</a> for more info.</p>
     *
     * @param timeWindow The time window for the trending people.
     * @param language   nullable - The language to query the results in. Default: en-US.
     * @param page       nullable - The page of results to return. Default: 1.
     * @return The trending people.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public PopularPersonResultsPage getPeople(TimeWindow timeWindow, String language, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TRENDING, "person", timeWindow.getValue())
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, PopularPersonResultsPage.class);
    }

    /**
     * <p>Get the trending TV shows on TMDB.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/trending-tv">documentation</a> for more info.</p>
     *
     * @param timeWindow The time window for the trending tv.
     * @param language   nullable - The language to query the results in. Default: en-US.
     * @return The trending tv.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public TvSeriesResultsPage getTv(TimeWindow timeWindow, String language) throws TmdbException {
        return getTv(timeWindow, language, 1);
    }

    /**
     * <p>Get the trending TV shows on TMDB.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/trending-tv">documentation</a> for more info.</p>
     *
     * @param timeWindow The time window for the trending tv.
     * @param language   nullable - The language to query the results in. Default: en-US.
     * @param page       nullable - The page of results to return. Default: 1.
     * @return The trending tv.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public TvSeriesResultsPage getTv(TimeWindow timeWindow, String language, Integer page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TRENDING, "tv", timeWindow.getValue())
            .addLanguage(language)
            .addPage(page);
        return mapJsonResult(apiUrl, TvSeriesResultsPage.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbTvEpisodeGroups.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.tv.episodegroups.TvEpisodeGroups;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;

/**
 * The movie database api for tv episode groups. See the
 * <a href="https://developer.themoviedb.org/reference/tv-episode-group-details">documentation</a> for more info.
 */
public class TmdbTvEpisodeGroups extends AbstractTmdbApi {
    protected static final String TMDB_METHOD_TV_EPISODE_GROUPS = "tv/episode_group";

    /**
     * Create a new TmdbTvEpisodeGroups instance to call the tv episode groups TMDb API methods.
     */
    TmdbTvEpisodeGroups(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get the details of a TV episode group.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-episode-group-details">documentation</a> for more info.</p>
     *
     * @param tvEpisodeGroupId The id of the tv episode group.
     * @return The tv episode group details.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public TvEpisodeGroups getDetails(String tvEpisodeGroupId) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV_EPISODE_GROUPS, tvEpisodeGroupId);
        return mapJsonResult(apiUrl, TvEpisodeGroups.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbTvEpisodes.java
================================================
package info.movito.themoviedbapi;

import java.util.HashMap;

import info.movito.themoviedbapi.model.core.AccountStates;
import info.movito.themoviedbapi.model.core.responses.ResponseStatus;
import info.movito.themoviedbapi.model.core.video.VideoResults;
import info.movito.themoviedbapi.model.tv.core.ChangeResults;
import info.movito.themoviedbapi.model.tv.core.Translations;
import info.movito.themoviedbapi.model.tv.episode.EpisodeCredits;
import info.movito.themoviedbapi.model.tv.episode.ExternalIds;
import info.movito.themoviedbapi.model.tv.episode.Images;
import info.movito.themoviedbapi.model.tv.episode.TvEpisodeDb;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.RequestType;
import info.movito.themoviedbapi.tools.TmdbException;
import info.movito.themoviedbapi.tools.appendtoresponse.TvEpisodesAppendToResponse;
import info.movito.themoviedbapi.util.JsonUtil;

import static info.movito.themoviedbapi.TmdbTvSeasons.TMDB_METHOD_TV_SEASON;
import static info.movito.themoviedbapi.TmdbTvSeries.TMDB_METHOD_TV;

/**
 * The movie database api for tv episodes. See the
 * <a href="https://developer.themoviedb.org/reference/tv-episode-details">documentation</a> for more info.
 */
public class TmdbTvEpisodes extends AbstractTmdbApi {
    public static final String TMDB_METHOD_TV_EPISODE = "episode";

    /**
     * Create a new TmdbTvEpisodes instance to call the tv episodes TMDb API methods.
     */
    TmdbTvEpisodes(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Query the details of a TV episode.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-episode-details">documentation</a> for more info.</p>
     *
     * @param seriesId         The TMDb id of the tv series.
     * @param seasonNumber     The season number of the tv series.
     * @param episodeNumber    The episode number of the tv series.
     * @param language         nullable - The language to query the results in. Default: en-US.
     * @param appendToResponse nullable - additional namespaces to append to the result (20 max).
     * @return The tv episode details.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public TvEpisodeDb getDetails(int seriesId, int seasonNumber, int episodeNumber, String language,
                                  TvEpisodesAppendToResponse... appendToResponse) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, TMDB_METHOD_TV_EPISODE, episodeNumber)
            .addLanguage(language)
            .addAppendToResponses(appendToResponse);
        return mapJsonResult(apiUrl, TvEpisodeDb.class);
    }

    /**
     * <p>Get the rating, watchlist and favourite status.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-episode-account-states">documentation</a> for more info.</p>
     *
     * @param seriesId       The TMDb id of the tv series.
     * @param seasonNumber   The season number of the tv series.
     * @param episodeNumber  The episode number of the tv series.
     * @param sessionId      nullable - The session id of the user.
     * @param guestSessionId nullable - The guest session id of the user.
     * @return The account states.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public AccountStates getAccountStates(int seriesId, int seasonNumber, int episodeNumber, String sessionId, String guestSessionId)
        throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(
            TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, TMDB_METHOD_TV_EPISODE, episodeNumber, "account_states")
            .addQueryParam("session_id", sessionId)
            .addQueryParam("guest_session_id", guestSessionId);
        return mapJsonResult(apiUrl, AccountStates.class);
    }

    /**
     * <p>Get the recent changes for a TV episode.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-episode-changes-by-id">documentation</a> for more info.</p>
     *
     * @param episodeId The TMDb id of the tv episode.
     * @return The change results.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ChangeResults getChanges(int episodeId)
        throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV, TMDB_METHOD_TV_EPISODE, episodeId, "changes");
        return mapJsonResult(apiUrl, ChangeResults.class);
    }

    /**
     * <p>Get the credits for a TV episode.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-episode-credits">documentation</a> for more info.</p>
     *
     * @param seriesId      The TMDb id of the tv series.
     * @param seasonNumber  The season number of the tv series.
     * @param episodeNumber The episode number of the tv series.
     * @param language      nullable - The language to query the results in. Default: en-US.
     * @return The credits.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public EpisodeCredits getCredits(int seriesId, int seasonNumber, int episodeNumber, String language)
        throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(
            TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, TMDB_METHOD_TV_EPISODE, episodeNumber, "credits")
            .addLanguage(language);
        return mapJsonResult(apiUrl, EpisodeCredits.class);
    }

    /**
     * <p>Get a list of external IDs that have been added to a TV episode.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-episode-external-ids">documentation</a> for more info.</p>
     *
     * @param seriesId      The TMDb id of the tv series.
     * @param seasonNumber  The season number of the tv series.
     * @param episodeNumber The episode number of the tv series.
     * @return The external IDs.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ExternalIds getExternalIds(int seriesId, int seasonNumber, int episodeNumber)
        throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(
            TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, TMDB_METHOD_TV_EPISODE, episodeNumber, "external_ids");
        return mapJsonResult(apiUrl, ExternalIds.class);
    }

    /**
     * <p>Get the images that belong to a TV episode.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-episode-images">documentation</a> for more info.</p>
     *
     * @param seriesId             The TMDb id of the tv series.
     * @param seasonNumber         The season number of the tv series.
     * @param episodeNumber        The episode number of the tv series.
     * @param language             nullable - The language to query the results in. Default: en-US.
     * @param includeImageLanguage nullable - Specify a comma separated list of ISO-639-1 values to query, for example: en,it
     * @return The images.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public Images getImages(int seriesId, int seasonNumber, int episodeNumber, String language, String... includeImageLanguage)
        throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(
            TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, TMDB_METHOD_TV_EPISODE, episodeNumber, "images")
            .addLanguage(language)
            .addQueryParamCommandSeparated("include_image_language", includeImageLanguage);
        return mapJsonResult(apiUrl, Images.class);
    }

    /**
     * <p>Get the translations that have been added to a TV episode.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-episode-translations">documentation</a> for more info.</p>
     *
     * @param seriesId      The TMDb id of the tv series.
     * @param seasonNumber  The season number of the tv series.
     * @param episodeNumber The episode number of the tv series.
     * @return The translations.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public Translations getTranslations(int seriesId, int seasonNumber, int episodeNumber)
        throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(
            TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, TMDB_METHOD_TV_EPISODE, episodeNumber, "translations");
        return mapJsonResult(apiUrl, Translations.class);
    }

    /**
     * <p>Get the videos that belong to a TV episode.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-episode-videos">documentation</a> for more info.</p>
     *
     * @param seriesId             The TMDb id of the tv series.
     * @param seasonNumber         The season number of the tv series.
     * @param episodeNumber        The episode number of the tv series.
     * @param language             nullable - The language to query the results in. Default: en-US.
     * @param includeVideoLanguage nullable - Specify a comma separated list of ISO-639-1 values to query, for example: en,it
     * @return The videos.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public VideoResults getVideos(int seriesId, int seasonNumber, int episodeNumber, String language, String... includeVideoLanguage)
        throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(
            TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, TMDB_METHOD_TV_EPISODE, episodeNumber, "videos")
            .addLanguage(language)
            .addQueryParamCommandSeparated("include_video_language", includeVideoLanguage);
        return mapJsonResult(apiUrl, VideoResults.class);
    }

    /**
     * <p>Rate a TV episode and save it to your rated list.</p>
     * <p>Note: if no <code>guestSessionId</code> or <code>sessionId</code> are provided, the method will add the rating to the API key
     * holder's account.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-episode-add-rating">documentation</a> for more info.</p>
     *
     * @param seriesId       The TMDb id of the tv series.
     * @param seasonNumber   The season number of the tv series.
     * @param episodeNumber  The episode number of the tv series.
     * @param guestSessionId nullable - The guest session id of the user.
     * @param sessionId      nullable - The session id of the user.
     * @param rating         The rating of the tv episode. Must be: 0 &lt; rating &le; 10.
     * @return The response status.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ResponseStatus addRating(int seriesId, int seasonNumber, int episodeNumber, String guestSessionId, String sessionId,
                                    double rating) throws TmdbException {
        if (rating < 0 || rating > 10) {
            throw new IllegalArgumentException("Rating must be: 0 < rating <= 10");
        }

        ApiUrl apiUrl = new ApiUrl(
            TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, TMDB_METHOD_TV_EPISODE, episodeNumber, "rating")
            .addQueryParam("session_id", sessionId)
            .addQueryParam("guest_session_id", guestSessionId);

        HashMap<String, Object> body = new HashMap<>();
        body.put("value", rating);

        String jsonBody = JsonUtil.toJson(body);
        return mapJsonResult(apiUrl, jsonBody, RequestType.POST, ResponseStatus.class);
    }

    /**
     * <p>Delete your rating on a TV episode.</p>
     * <p>Note: if no <code>guestSessionId</code> or <code>sessionId</code> are provided, the method will delete the rating for the API key
     * holder's account.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-episode-delete-rating">documentation</a> for more info.</p>
     *
     * @param seriesId       The TMDb id of the tv series.
     * @param seasonNumber   The season number of the tv series.
     * @param episodeNumber  The episode number of the tv series.
     * @param guestSessionId nullable - The guest session id of the user.
     * @param sessionId      nullable - The session id of the user.
     * @return The response status.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ResponseStatus deleteRating(int seriesId, int seasonNumber, int episodeNumber, String guestSessionId, String sessionId)
        throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(
            TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, TMDB_METHOD_TV_EPISODE, episodeNumber, "rating")
            .addQueryParam("session_id", sessionId)
            .addQueryParam("guest_session_id", guestSessionId);
        return mapJsonResult(apiUrl, null, RequestType.DELETE, ResponseStatus.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbTvSeasons.java
================================================
package info.movito.themoviedbapi;

import info.movito.themoviedbapi.model.core.video.VideoResults;
import info.movito.themoviedbapi.model.core.watchproviders.ProviderResults;
import info.movito.themoviedbapi.model.tv.core.Translations;
import info.movito.themoviedbapi.model.tv.core.credits.AggregateCredits;
import info.movito.themoviedbapi.model.tv.core.credits.Credits;
import info.movito.themoviedbapi.model.tv.season.AccountStateResults;
import info.movito.themoviedbapi.model.tv.season.ChangeResults;
import info.movito.themoviedbapi.model.tv.season.ExternalIds;
import info.movito.themoviedbapi.model.tv.season.Images;
import info.movito.themoviedbapi.model.tv.season.TvSeasonDb;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.TmdbException;
import info.movito.themoviedbapi.tools.appendtoresponse.TvSeasonsAppendToResponse;

import static info.movito.themoviedbapi.TmdbTvSeries.TMDB_METHOD_TV;

/**
 * The movie database api for tv seasons. See the
 * <a href="https://developer.themoviedb.org/reference/tv-season-details">documentation</a> for more info.
 */
public class TmdbTvSeasons extends AbstractTmdbApi {
    public static final String TMDB_METHOD_TV_SEASON = "season";

    /**
     * Create a new TmdbTvSeasons instance to call the tv seasons TMDb API methods.
     */
    TmdbTvSeasons(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Query the details of the TV season.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-season-details">documentation</a> for more info.</p>
     *
     * @param seriesId         The TMDb id of the TV series.
     * @param seasonNumber     The season number.
     * @param language         nullable - The language to query the results in. Default: en-US.
     * @param appendToResponse nullable - additional namespaces to append to the result (20 max).
     * @return The TV season details.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public TvSeasonDb getDetails(int seriesId, int seasonNumber, String language, TvSeasonsAppendToResponse... appendToResponse)
        throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber)
            .addLanguage(language)
            .addAppendToResponses(appendToResponse);
        return mapJsonResult(apiUrl, TvSeasonDb.class);
    }

    /**
     * <p>Get the rating, watchlist and favourite status.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-season-account-states">documentation</a> for more info.</p>
     *
     * @param seriesId       The TMDb id of the TV series.
     * @param seasonNumber   The season number.
     * @param sessionId      nullable - The session id of the user.
     * @param guestSessionId nullable - The guest session id of the user.
     * @return The account states.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public AccountStateResults getAccountStates(int seriesId, int seasonNumber, String sessionId, String guestSessionId)
        throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, "account_states")
            .addQueryParam("session_id", sessionId)
            .addQueryParam("guest_session_id", guestSessionId);
        return mapJsonResult(apiUrl, AccountStateResults.class);
    }

    /**
     * <p>Get the aggregate credits (cast and crew) that have been added to a TV season.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-season-aggregate-credits">documentation</a> for more info.</p>
     *
     * @param seriesId     The TMDb id of the TV series.
     * @param seasonNumber The season number.
     * @param language     nullable - The language to query the results in. Default: en-US.
     * @return The aggregate credits.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public AggregateCredits getAggregateCredits(int seriesId, int seasonNumber, String language) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, "aggregate_credits")
            .addLanguage(language);
        return mapJsonResult(apiUrl, AggregateCredits.class);
    }

    /**
     * <p>Get the recent changes for a TV season.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-season-changes-by-id">documentation</a> for more info.</p>
     *
     * @param seasonId  The TMDb id of the TV season.
     * @param startDate nullable - The start date, in format: YYYY-MM-DD.
     * @param endDate   nullable - The end date, in format: YYYY-MM-DD.
     * @param page      nullable - The page of results to return. Default: 1.
     * @return The changes.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ChangeResults getChanges(int seasonId, String startDate, String endDate, int page) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV, TMDB_METHOD_TV_SEASON, seasonId, "changes")
            .addQueryParam("start_date", startDate)
            .addQueryParam("end_date", endDate)
            .addPage(page);
        return mapJsonResult(apiUrl, ChangeResults.class);
    }

    /**
     * <p>Get the latest tv season credits.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-season-credits">documentation</a> for more info.</p>
     *
     * @param seriesId     The TMDb id of the TV series.
     * @param seasonNumber The season number.
     * @param language     nullable - The language to query the results in. Default: en-US.
     * @return The credits.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public Credits getCredits(int seriesId, int seasonNumber, String language) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, "credits")
            .addLanguage(language);
        return mapJsonResult(apiUrl, Credits.class);
    }

    /**
     * <p>Get a list of external IDs that have been added to a TV season.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-season-external-ids">documentation</a> for more info.</p>
     *
     * @param seriesId     The TMDb id of the TV series.
     * @param seasonNumber The season number.
     * @return The external IDs.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ExternalIds getExternalIds(int seriesId, int seasonNumber) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, "external_ids");
        return mapJsonResult(apiUrl, ExternalIds.class);
    }

    /**
     * <p>Get the images that belong to a TV season.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-season-images">documentation</a> for more info.</p>
     *
     * @param seriesId             The TMDb id of the TV series.
     * @param seasonNumber         The season number.
     * @param language             nullable - The language to query the results in. Default: en-US.
     * @param includeImageLanguage nullable - Specify a comma separated list of ISO-639-1 values to query, for example: en,it
     * @return The images.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public Images getImages(int seriesId, int seasonNumber, String language, String... includeImageLanguage) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, "images")
            .addLanguage(language)
            .addQueryParamCommandSeparated("include_image_language", includeImageLanguage);
        return mapJsonResult(apiUrl, Images.class);
    }

    /**
     * <p>Get the translations for a TV season.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-season-translations">documentation</a> for more info.</p>
     *
     * @param seriesId     The TMDb id of the TV series.
     * @param seasonNumber The season number.
     * @return The translations.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public Translations getTranslations(int seriesId, int seasonNumber) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, "translations");
        return mapJsonResult(apiUrl, Translations.class);
    }

    /**
     * <p>Get the videos that belong to a TV season.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-season-videos">documentation</a> for more info.</p>
     *
     * @param seriesId             The TMDb id of the TV series.
     * @param seasonNumber         The season number.
     * @param language             nullable - The language to query the results in. Default: en-US.
     * @param includeVideoLanguage nullable - Specify a comma separated list of ISO-639-1 values to query, for example: en,it
     * @return The videos.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public VideoResults getVideos(int seriesId, int seasonNumber, String language, String... includeVideoLanguage) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, "videos")
            .addLanguage(language)
            .addQueryParamCommandSeparated("include_video_language", includeVideoLanguage);
        return mapJsonResult(apiUrl, VideoResults.class);
    }

    /**
     * <p>Get the list of streaming providers we have for a TV season.</p>
     * <p>In order to use this data you must attribute the source of the data as JustWatch. If TMDb find any usage not complying with these
     * terms TMDb will revoke access to the API.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-season-watch-providers">documentation</a> for more info.</p>
     *
     * @param seriesId     The TMDb id of the TV series.
     * @param seasonNumber The season number.
     * @param language     nullable - The language to query the results in. Default: en-US.
     * @return The watch providers.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public ProviderResults getWatchProviders(int seriesId, int seasonNumber, String language) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV, seriesId, TMDB_METHOD_TV_SEASON, seasonNumber, "watch/providers")
            .addLanguage(language);
        return mapJsonResult(apiUrl, ProviderResults.class);
    }
}


================================================
FILE: src/main/java/info/movito/themoviedbapi/TmdbTvSeries.java
================================================
package info.movito.themoviedbapi;

import java.util.HashMap;

import info.movito.themoviedbapi.model.core.AccountStates;
import info.movito.themoviedbapi.model.core.ReviewResultsPage;
import info.movito.themoviedbapi.model.core.TvKeywords;
import info.movito.themoviedbapi.model.core.TvSeriesResultsPage;
import info.movito.themoviedbapi.model.core.responses.ResponseStatus;
import info.movito.themoviedbapi.model.core.video.VideoResults;
import info.movito.themoviedbapi.model.core.watchproviders.ProviderResults;
import info.movito.themoviedbapi.model.tv.core.ChangeResults;
import info.movito.themoviedbapi.model.tv.core.credits.AggregateCredits;
import info.movito.themoviedbapi.model.tv.core.credits.Credits;
import info.movito.themoviedbapi.model.tv.series.AlternativeTitleResults;
import info.movito.themoviedbapi.model.tv.series.ContentRatingResults;
import info.movito.themoviedbapi.model.tv.series.EpisodeGroupResults;
import info.movito.themoviedbapi.model.tv.series.ExternalIds;
import info.movito.themoviedbapi.model.tv.series.Images;
import info.movito.themoviedbapi.model.tv.series.ScreenedTheatricallyResults;
import info.movito.themoviedbapi.model.tv.series.Translations;
import info.movito.themoviedbapi.model.tv.series.TvSeriesDb;
import info.movito.themoviedbapi.model.tv.series.TvSeriesListResultsPage;
import info.movito.themoviedbapi.tools.ApiUrl;
import info.movito.themoviedbapi.tools.RequestType;
import info.movito.themoviedbapi.tools.TmdbException;
import info.movito.themoviedbapi.tools.appendtoresponse.TvSeriesAppendToResponse;
import info.movito.themoviedbapi.util.JsonUtil;

/**
 * The movie database api for tv series. See the
 * <a href="https://developer.themoviedb.org/reference/tv-series-details">documentation</a> for more info.
 */
public class TmdbTvSeries extends AbstractTmdbApi {
    public static final String TMDB_METHOD_TV = "tv";

    /**
     * Create a new TmdbTvSeries instance to call the tv series TMDb API methods.
     */
    TmdbTvSeries(TmdbApi tmdbApi) {
        super(tmdbApi);
    }

    /**
     * <p>Get the details of a TV show.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-series-details">documentation</a> for more info.</p>
     *
     * @param seriesId         The TMDb id of the tv series.
     * @param language         nullable - The language to query the results in. Default: en-US.
     * @param appendToResponse nullable - additional namespaces to append to the result (20 max).
     * @return The tv series details.
     * @throws TmdbException If there was an error making the request or mapping the response.
     */
    public TvSeriesDb getDetails(int seriesId, String language, TvSeriesAppendToResponse... appendToResponse) throws TmdbException {
        ApiUrl apiUrl = new ApiUrl(TMDB_METHOD_TV, seriesId)
            .addLanguage(language)
            .addAppendToResponses(appendToResponse);
        return mapJsonResult(apiUrl, TvSeriesDb.class);
    }

    /**
     * <p>Get the rating, watchlist and favourite status.</p>
     * <p>See the <a href="https://developer.themoviedb.org/reference/tv-series-account-states">documentation</a> for more info.</p>
     *
     * @param seriesId       The TMDb id of the tv series.
     * @param sessionId      nullable - The session id of the user.
     * @param guestSessionId nullable - The guest session id of the user.
     * @return The account states o
Download .txt
gitextract_z5gux3ao/

├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   └── bug_report.md
│   ├── dependabot.yml
│   └── workflows/
│       └── gradle.yml
├── .gitignore
├── LICENCE.txt
├── README.md
├── build.gradle.kts
├── config/
│   └── checkstyle/
│       ├── checkstyle.xml
│       └── suppressions.xml
├── devel_notes.md
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── lombok.config
├── settings.gradle.kts
└── src/
    ├── main/
    │   └── java/
    │       ├── info/
    │       │   └── movito/
    │       │       └── themoviedbapi/
    │       │           ├── AbstractTmdbApi.java
    │       │           ├── TmdbAccount.java
    │       │           ├── TmdbApi.java
    │       │           ├── TmdbAuthentication.java
    │       │           ├── TmdbCertifications.java
    │       │           ├── TmdbChanges.java
    │       │           ├── TmdbCollections.java
    │       │           ├── TmdbCompanies.java
    │       │           ├── TmdbConfiguration.java
    │       │           ├── TmdbDiscover.java
    │       │           ├── TmdbFind.java
    │       │           ├── TmdbGenre.java
    │       │           ├── TmdbGuestSessions.java
    │       │           ├── TmdbKeywords.java
    │       │           ├── TmdbLists.java
    │       │           ├── TmdbMovieLists.java
    │       │           ├── TmdbMovies.java
    │       │           ├── TmdbNetworks.java
    │       │           ├── TmdbPeople.java
    │       │           ├── TmdbPeopleLists.java
    │       │           ├── TmdbReviews.java
    │       │           ├── TmdbSearch.java
    │       │           ├── TmdbTrending.java
    │       │           ├── TmdbTvEpisodeGroups.java
    │       │           ├── TmdbTvEpisodes.java
    │       │           ├── TmdbTvSeasons.java
    │       │           ├── TmdbTvSeries.java
    │       │           ├── TmdbTvSeriesLists.java
    │       │           ├── TmdbWatchProviders.java
    │       │           ├── model/
    │       │           │   ├── account/
    │       │           │   │   ├── Account.java
    │       │           │   │   └── Avatar.java
    │       │           │   ├── authentication/
    │       │           │   │   ├── GuestSession.java
    │       │           │   │   ├── RequestToken.java
    │       │           │   │   └── Session.java
    │       │           │   ├── certifications/
    │       │           │   │   ├── Certification.java
    │       │           │   │   └── CertificationResults.java
    │       │           │   ├── changes/
    │       │           │   │   ├── Change.java
    │       │           │   │   └── ChangesResultsPage.java
    │       │           │   ├── collections/
    │       │           │   │   ├── CollectionInfo.java
    │       │           │   │   ├── Data.java
    │       │           │   │   ├── Images.java
    │       │           │   │   ├── Part.java
    │       │           │   │   ├── Translation.java
    │       │           │   │   └── Translations.java
    │       │           │   ├── companies/
    │       │           │   │   ├── AlternativeNamesResultsPage.java
    │       │           │   │   └── Company.java
    │       │           │   ├── configuration/
    │       │           │   │   ├── Configuration.java
    │       │           │   │   ├── Country.java
    │       │           │   │   ├── ImageConfig.java
    │       │           │   │   ├── Job.java
    │       │           │   │   └── Timezone.java
    │       │           │   ├── core/
    │       │           │   │   ├── AbstractJsonMapping.java
    │       │           │   │   ├── AccountStates.java
    │       │           │   │   ├── AlternativeName.java
    │       │           │   │   ├── AlternativeTitle.java
    │       │           │   │   ├── Genre.java
    │       │           │   │   ├── Genres.java
    │       │           │   │   ├── IdElement.java
    │       │           │   │   ├── Language.java
    │       │           │   │   ├── Movie.java
    │       │           │   │   ├── MovieDbResultsPage.java
    │       │           │   │   ├── MovieResultsPage.java
    │       │           │   │   ├── NamedElement.java
    │       │           │   │   ├── NamedIdElement.java
    │       │           │   │   ├── NamedStringIdElement.java
    │       │           │   │   ├── ProductionCompany.java
    │       │           │   │   ├── ProductionCountry.java
    │       │           │   │   ├── Results.java
    │       │           │   │   ├── ResultsPage.java
    │       │           │   │   ├── Review.java
    │       │           │   │   ├── ReviewResultsPage.java
    │       │           │   │   ├── StringIdElement.java
    │       │           │   │   ├── TvKeywords.java
    │       │           │   │   ├── TvSeries.java
    │       │           │   │   ├── TvSeriesResultsPage.java
    │       │           │   │   ├── image/
    │       │           │   │   │   ├── Artwork.java
    │       │           │   │   │   ├── Image.java
    │       │           │   │   │   └── ImageResults.java
    │       │           │   │   ├── multi/
    │       │           │   │   │   ├── Multi.java
    │       │           │   │   │   ├── MultiMovie.java
    │       │           │   │   │   ├── MultiPerson.java
    │       │           │   │   │   ├── MultiResultsPage.java
    │       │           │   │   │   └── MultiTvSeries.java
    │       │           │   │   ├── popularperson/
    │       │           │   │   │   ├── KnownFor.java
    │       │           │   │   │   ├── PopularPerson.java
    │       │           │   │   │   └── PopularPersonResultsPage.java
    │       │           │   │   ├── responses/
    │       │           │   │   │   ├── ResponseStatus.java
    │       │           │   │   │   ├── ResponseStatusAuthentication.java
    │       │           │   │   │   ├── ResponseStatusDelete.java
    │       │           │   │   │   └── TmdbResponseException.java
    │       │           │   │   ├── video/
    │       │           │   │   │   ├── Video.java
    │       │           │   │   │   └── VideoResults.java
    │       │           │   │   └── watchproviders/
    │       │           │   │       ├── Provider.java
    │       │           │   │       ├── ProviderResults.java
    │       │           │   │       └── WatchProviders.java
    │       │           │   ├── find/
    │       │           │   │   ├── FindMovie.java
    │       │           │   │   ├── FindPerson.java
    │       │           │   │   ├── FindResults.java
    │       │           │   │   ├── FindTvEpisode.java
    │       │           │   │   ├── FindTvSeason.java
    │       │           │   │   └── FindTvSeries.java
    │       │           │   ├── keywords/
    │       │           │   │   └── Keyword.java
    │       │           │   ├── lists/
    │       │           │   │   ├── ListDetails.java
    │       │           │   │   ├── ListItemStatus.java
    │       │           │   │   └── MovieListCreationStatus.java
    │       │           │   ├── movielists/
    │       │           │   │   ├── Dates.java
    │       │           │   │   └── MovieResultsPageWithDates.java
    │       │           │   ├── movies/
    │       │           │   │   ├── AlternativeTitles.java
    │       │           │   │   ├── BelongsToCollection.java
    │       │           │   │   ├── Cast.java
    │       │           │   │   ├── Credits.java
    │       │           │   │   ├── Crew.java
    │       │           │   │   ├── Data.java
    │       │           │   │   ├── ExternalIds.java
    │       │           │   │   ├── Images.java
    │       │           │   │   ├── KeywordResults.java
    │       │           │   │   ├── MovieDb.java
    │       │           │   │   ├── MovieList.java
    │       │           │   │   ├── MovieListResultsPage.java
    │       │           │   │   ├── ReleaseDate.java
    │       │           │   │   ├── ReleaseDateResults.java
    │       │           │   │   ├── ReleaseInfo.java
    │       │           │   │   ├── ReleaseType.java
    │       │           │   │   ├── Translation.java
    │       │           │   │   ├── Translations.java
    │       │           │   │   └── changes/
    │       │           │   │       ├── Change.java
    │       │           │   │       ├── ChangeItem.java
    │       │           │   │       └── ChangeResults.java
    │       │           │   ├── networks/
    │       │           │   │   ├── AlternativeNamesResults.java
    │       │           │   │   └── Network.java
    │       │           │   ├── people/
    │       │           │   │   ├── Data.java
    │       │           │   │   ├── ExternalIds.java
    │       │           │   │   ├── Gender.java
    │       │           │   │   ├── PersonDb.java
    │       │           │   │   ├── PersonImages.java
    │       │           │   │   ├── Translation.java
    │       │           │   │   ├── Translations.java
    │       │           │   │   └── credits/
    │       │           │   │       ├── Cast.java
    │       │           │   │       ├── CombinedPersonCredits.java
    │       │           │   │       ├── Crew.java
    │       │           │   │       ├── MediaType.java
    │       │           │   │       ├── MovieCast.java
    │       │           │   │       ├── MovieCredits.java
    │       │           │   │       ├── MovieCrew.java
    │       │           │   │       ├── TvCast.java
    │       │           │   │       ├── TvCredits.java
    │       │           │   │       └── TvCrew.java
    │       │           │   ├── rated/
    │       │           │   │   ├── RatedMovie.java
    │       │           │   │   ├── RatedMovieResultsPage.java
    │       │           │   │   ├── RatedTvEpisode.java
    │       │           │   │   ├── RatedTvEpisodeResultsPage.java
    │       │           │   │   ├── RatedTvSeries.java
    │       │           │   │   └── RatedTvSeriesResultsPage.java
    │       │           │   ├── reviews/
    │       │           │   │   ├── AuthorDetails.java
    │       │           │   │   └── Review.java
    │       │           │   ├── search/
    │       │           │   │   ├── Collection.java
    │       │           │   │   ├── CollectionResultsPage.java
    │       │           │   │   ├── Company.java
    │       │           │   │   ├── CompanyResultsPage.java
    │       │           │   │   └── KeywordResultsPage.java
    │       │           │   ├── tv/
    │       │           │   │   ├── core/
    │       │           │   │   │   ├── Change.java
    │       │           │   │   │   ├── ChangeItem.java
    │       │           │   │   │   ├── ChangeResults.java
    │       │           │   │   │   ├── Data.java
    │       │           │   │   │   ├── Network.java
    │       │           │   │   │   ├── Translation.java
    │       │           │   │   │   ├── Translations.java
    │       │           │   │   │   ├── TvEpisode.java
    │       │           │   │   │   ├── TvSeason.java
    │       │           │   │   │   └── credits/
    │       │           │   │   │       ├── AggregateCast.java
    │       │           │   │   │       ├── AggregateCredits.java
    │       │           │   │   │       ├── AggregateCrew.java
    │       │           │   │   │       ├── Cast.java
    │       │           │   │   │       ├── Credits.java
    │       │           │   │   │       └── Crew.java
    │       │           │   │   ├── episode/
    │       │           │   │   │   ├── EpisodeCredits.java
    │       │           │   │   │   ├── ExternalIds.java
    │       │           │   │   │   ├── GuestStar.java
    │       │           │   │   │   ├── Images.java
    │       │           │   │   │   └── TvEpisodeDb.java
    │       │           │   │   ├── episodegroups/
    │       │           │   │   │   ├── EpisodeGroupType.java
    │       │           │   │   │   ├── OrderedTvEpisode.java
    │       │           │   │   │   ├── TvEpisodeGroup.java
    │       │           │   │   │   └── TvEpisodeGroups.java
    │       │           │   │   ├── season/
    │       │           │   │   │   ├── AccountState.java
    │       │           │   │   │   ├── AccountStateResults.java
    │       │           │   │   │   ├── Change.java
    │       │           │   │   │   ├── ChangeItem.java
    │       │           │   │   │   ├── ChangeResults.java
    │       │           │   │   │   ├── ExternalIds.java
    │       │           │   │   │   ├── Images.java
    │       │           │   │   │   ├── TvSeasonDb.java
    │       │           │   │   │   └── TvSeasonEpisode.java
    │       │           │   │   └── series/
    │       │           │   │       ├── AlternativeTitleResults.java
    │       │           │   │       ├── ContentRating.java
    │       │           │   │       ├── ContentRatingResults.java
    │       │           │   │       ├── CreatedBy.java
    │       │           │   │       ├── Data.java
    │       │           │   │       ├── EpisodeGroup.java
    │       │           │   │       ├── EpisodeGroupResults.java
    │       │           │   │       ├── ExternalIds.java
    │       │           │   │       ├── Images.java
    │       │           │   │       ├── Job.java
    │       │           │   │       ├── Role.java
    │       │           │   │       ├── ScreenedTheatrically.java
    │       │           │   │       ├── ScreenedTheatricallyResults.java
    │       │           │   │       ├── Translation.java
    │       │           │   │       ├── Translations.java
    │       │           │   │       ├── TvSeriesDb.java
    │       │           │   │       ├── TvSeriesList.java
    │       │           │   │       └── TvSeriesListResultsPage.java
    │       │           │   └── watchproviders/
    │       │           │       ├── AvailableRegion.java
    │       │           │       ├── AvailableRegionResults.java
    │       │           │       ├── Provider.java
    │       │           │       └── ProviderResults.java
    │       │           ├── tools/
    │       │           │   ├── ApiUrl.java
    │       │           │   ├── RequestType.java
    │       │           │   ├── TmdbException.java
    │       │           │   ├── TmdbHttpClient.java
    │       │           │   ├── TmdbResponseCode.java
    │       │           │   ├── TmdbUrlReader.java
    │       │           │   ├── appendtoresponse/
    │       │           │   │   ├── AppendToResponse.java
    │       │           │   │   ├── MovieAppendToResponse.java
    │       │           │   │   ├── PersonAppendToResponse.java
    │       │           │   │   ├── TvEpisodesAppendToResponse.java
    │       │           │   │   ├── TvSeasonsAppendToResponse.java
    │       │           │   │   └── TvSeriesAppendToResponse.java
    │       │           │   ├── builders/
    │       │           │   │   ├── ParamBuilder.java
    │       │           │   │   └── discover/
    │       │           │   │       ├── DiscoverMovieParamBuilder.java
    │       │           │   │       ├── DiscoverParamBuilder.java
    │       │           │   │       └── DiscoverTvParamBuilder.java
    │       │           │   ├── model/
    │       │           │   │   └── time/
    │       │           │   │       ├── ExternalSource.java
    │       │           │   │       └── TimeWindow.java
    │       │           │   └── sortby/
    │       │           │       ├── AccountSortBy.java
    │       │           │       ├── DiscoverMovieSortBy.java
    │       │           │       ├── DiscoverTvSortBy.java
    │       │           │       └── SortBy.java
    │       │           └── util/
    │       │               ├── JsonUtil.java
    │       │               └── ModelUtil.java
    │       └── module-info.java
    └── test/
        ├── java/
        │   └── info/
        │       └── movito/
        │           └── themoviedbapi/
        │               ├── AbstractTmdbApiTest.java
        │               ├── TmdbAccountTest.java
        │               ├── TmdbAuthenticationTest.java
        │               ├── TmdbCertificationsTest.java
        │               ├── TmdbChangesTest.java
        │               ├── TmdbCollectionsTest.java
        │               ├── TmdbCompaniesTest.java
        │               ├── TmdbConfigurationTest.java
        │               ├── TmdbDiscoverTest.java
        │               ├── TmdbFindTest.java
        │               ├── TmdbGenresTest.java
        │               ├── TmdbGuestSessionsTest.java
        │               ├── TmdbKeywordsTest.java
        │               ├── TmdbListsTest.java
        │               ├── TmdbMovieListsTest.java
        │               ├── TmdbMoviesTest.java
        │               ├── TmdbNetworksTest.java
        │               ├── TmdbPeopleListsTest.java
        │               ├── TmdbPeopleTest.java
        │               ├── TmdbReviewsTest.java
        │               ├── TmdbTrendingTest.java
        │               ├── TmdbTvEpisodeGroupsTest.java
        │               ├── TmdbTvEpisodesTest.java
        │               ├── TmdbTvSearchTest.java
        │               ├── TmdbTvSeasonsTest.java
        │               ├── TmdbTvSeriesListsTest.java
        │               ├── TmdbTvSeriesTest.java
        │               ├── TmdbWatchProvidersTest.java
        │               ├── testutil/
        │               │   ├── AbstractJsonMappingValidator.java
        │               │   ├── TestUtils.java
        │               │   └── ValidatorConfig.java
        │               └── util/
        │                   ├── JsonUtilTest.java
        │                   └── ModelUtilTest.java
        └── resources/
            └── api_responses/
                ├── account/
                │   ├── add_favourite.json
                │   ├── add_to_watchlist.json
                │   ├── details.json
                │   ├── favourite_movies.json
                │   ├── favourite_tv.json
                │   ├── lists.json
                │   ├── rated_movies.json
                │   ├── rated_tv.json
                │   ├── rated_tv_episodes.json
                │   ├── watchlist_movies.json
                │   └── watchlist_tv.json
                ├── authentication/
                │   ├── create_guest_session.json
                │   ├── create_request_token.json
                │   ├── create_request_token_unsuccessful.json
                │   ├── create_session.json
                │   ├── create_session_with_login.json
                │   ├── create_session_with_login_unsuccessful.json
                │   ├── delete_session.json
                │   ├── validate_key.json
                │   └── validate_key_unsuccessful.json
                ├── certifications/
                │   ├── movie.json
                │   └── tv.json
                ├── changes/
                │   ├── movie_list.json
                │   ├── people_list.json
                │   └── tv_list.json
                ├── collections/
                │   ├── details.json
                │   ├── images.json
                │   └── translations.json
                ├── companies/
                │   ├── alternative_names.json
                │   ├── details.json
                │   └── images.json
                ├── configuration/
                │   ├── countries.json
                │   ├── details.json
                │   ├── jobs.json
                │   ├── languages.json
                │   ├── primary_translations.json
                │   └── timezones.json
                ├── discover/
                │   ├── movies.json
                │   └── tv.json
                ├── find/
                │   ├── movie_results.json
                │   ├── person_results.json
                │   ├── tv_episode_results.json
                │   ├── tv_results.json
                │   └── tv_season_results.json
                ├── genres/
                │   ├── movie_list.json
                │   └── tv_list.json
                ├── guest_sessions/
                │   ├── rated_movies.json
                │   ├── rated_tv.json
                │   └── rated_tv_episodes.json
                ├── keywords/
                │   └── details.json
                ├── lists/
                │   ├── add_movie.json
                │   ├── check_item_status.json
                │   ├── clear.json
                │   ├── create.json
                │   ├── delete.json
                │   ├── details.json
                │   └── remove_movie.json
                ├── movie_lists/
                │   ├── now_playing.json
                │   ├── popular.json
                │   ├── top_rated.json
                │   └── upcoming.json
                ├── movies/
                │   ├── account_states.json
                │   ├── add_rating.json
                │   ├── alternative_titles.json
                │   ├── changes.json
                │   ├── credits.json
                │   ├── delete_rating.json
                │   ├── details.json
                │   ├── details_with_append_to_response.json
                │   ├── external_ids.json
                │   ├── images.json
                │   ├── keywords.json
                │   ├── latest.json
                │   ├── lists.json
                │   ├── recommendations.json
                │   ├── release_dates.json
                │   ├── reviews.json
                │   ├── similar.json
                │   ├── translations.json
                │   ├── videos.json
                │   └── watch_providers.json
                ├── networks/
                │   ├── alternative_names.json
                │   ├── details.json
                │   └── images.json
                ├── people/
                │   ├── changes.json
                │   ├── combined_credits.json
                │   ├── details.json
                │   ├── details_with_append_to_response.json
                │   ├── external_ids.json
                │   ├── images.json
                │   ├── latest.json
                │   ├── movie_credits.json
                │   ├── translations.json
                │   └── tv_credits.json
                ├── people_lists/
                │   └── popular.json
                ├── reviews/
                │   └── details.json
                ├── search/
                │   ├── collection.json
                │   ├── company.json
                │   ├── keyword.json
                │   ├── movie.json
                │   ├── multi.json
                │   ├── person.json
                │   └── tv.json
                ├── trending/
                │   ├── all.json
                │   ├── movies.json
                │   ├── people.json
                │   └── tv.json
                ├── tv_episode_groups/
                │   └── details.json
                ├── tv_episodes/
                │   ├── account_states.json
                │   ├── add_rating.json
                │   ├── changes.json
                │   ├── credits.json
                │   ├── delete_rating.json
                │   ├── details.json
                │   ├── details_with_append_to_response.json
                │   ├── external_ids.json
                │   ├── images.json
                │   ├── translations.json
                │   └── videos.json
                ├── tv_seasons/
                │   ├── account_states.json
                │   ├── aggregate_credits.json
                │   ├── changes.json
                │   ├── credits.json
                │   ├── details.json
                │   ├── details_with_append_to_response.json
                │   ├── external_ids.json
                │   ├── images.json
                │   ├── translations.json
                │   ├── videos.json
                │   └── watch_providers.json
                ├── tv_series/
                │   ├── account_states.json
                │   ├── add_rating.json
                │   ├── aggregate_credits.json
                │   ├── alternative_titles.json
                │   ├── changes.json
                │   ├── content_ratings.json
                │   ├── credits.json
                │   ├── delete_rating.json
                │   ├── details.json
                │   ├── details_with_append_to_response.json
                │   ├── episode_groups.json
                │   ├── external_ids.json
                │   ├── images.json
                │   ├── keywords.json
                │   ├── latest.json
                │   ├── lists.json
                │   ├── recommendations.json
                │   ├── reviews.json
                │   ├── screened_theatrically.json
                │   ├── similar.json
                │   ├── translations.json
                │   ├── videos.json
                │   └── watch_providers.json
                ├── tv_series_lists/
                │   ├── airing_today.json
                │   ├── on_the_air.json
                │   ├── popular.json
                │   └── top_rated.json
                └── watch_providers/
                    ├── available_regions.json
                    ├── empty_watch_providers.json
                    ├── movie_providers.json
                    └── tv_providers.json
Download .txt
SYMBOL INDEX (837 symbols across 272 files)

FILE: src/main/java/info/movito/themoviedbapi/AbstractTmdbApi.java
  class AbstractTmdbApi (line 21) | public abstract class AbstractTmdbApi {
    method AbstractTmdbApi (line 38) | AbstractTmdbApi(TmdbApi tmdbApi) {
    method mapJsonResult (line 50) | protected <T> T mapJsonResult(ApiUrl apiUrl, Class<T> clazz) throws Tm...
    method mapJsonResult (line 62) | protected <T> T mapJsonResult(ApiUrl apiUrl, TypeReference<T> resultCl...
    method mapJsonResult (line 75) | protected <T> T mapJsonResult(ApiUrl apiUrl, String jsonBody, Class<T>...
    method mapJsonResult (line 88) | protected <T> T mapJsonResult(ApiUrl apiUrl, String jsonBody, TypeRefe...
    method mapJsonResult (line 102) | protected <T> T mapJsonResult(ApiUrl apiUrl, String jsonBody, RequestT...
    method mapJsonResult (line 116) | protected <T> T mapJsonResult(ApiUrl apiUrl, String jsonBody, RequestT...
    method mapJsonResult (line 131) | private <T> T mapJsonResult(ApiUrl apiUrl, String jsonBody, RequestTyp...

FILE: src/main/java/info/movito/themoviedbapi/TmdbAccount.java
  class TmdbAccount (line 23) | public class TmdbAccount extends AbstractTmdbApi {
    method TmdbAccount (line 30) | TmdbAccount(TmdbApi tmdbApi) {
    method getDetails (line 43) | public Account getDetails(Integer accountId, String sessionId) throws ...
    method addFavorite (line 61) | public ResponseStatus addFavorite(Integer accountId, String sessionId,...
    method removeFavorite (line 77) | public ResponseStatus removeFavorite(Integer accountId, String session...
    method changeFavoriteStatus (line 82) | private ResponseStatus changeFavoriteStatus(Integer accountId, String ...
    method addToWatchList (line 107) | public ResponseStatus addToWatchList(Integer accountId, String session...
    method removeFromWatchList (line 123) | public ResponseStatus removeFromWatchList(Integer accountId, String se...
    method changeWatchListStatus (line 128) | private ResponseStatus changeWatchListStatus(Integer accountId, String...
    method getFavoriteMovies (line 154) | public MovieResultsPage getFavoriteMovies(Integer accountId, String se...
    method getFavoriteTv (line 177) | public TvSeriesResultsPage getFavoriteTv(Integer accountId, String ses...
    method getLists (line 198) | public MovieListResultsPage getLists(Integer accountId, String session...
    method getRatedMovies (line 218) | public RatedMovieResultsPage getRatedMovies(int accountId, String sess...
    method getRatedTvSeries (line 241) | public RatedTvSeriesResultsPage getRatedTvSeries(int accountId, String...
    method getRatedTvEpisodes (line 264) | public RatedTvEpisodeResultsPage getRatedTvEpisodes(int accountId, Str...
    method getWatchListMovies (line 287) | public MovieResultsPage getWatchListMovies(Integer accountId, String s...
    method getWatchListTvSeries (line 310) | public TvSeriesResultsPage getWatchListTvSeries(Integer accountId, Str...
    type MediaType (line 325) | public enum MediaType {
      method toString (line 328) | @Override

FILE: src/main/java/info/movito/themoviedbapi/TmdbApi.java
  class TmdbApi (line 14) | public class TmdbApi {
    method TmdbApi (line 26) | public TmdbApi(String apiKey) {
    method TmdbApi (line 35) | public TmdbApi(TmdbUrlReader tmdbUrlReader) {
    method getAccount (line 39) | public TmdbAccount getAccount() {
    method getAuthentication (line 43) | public TmdbAuthentication getAuthentication() {
    method getCertifications (line 47) | public TmdbCertifications getCertifications() {
    method getChanges (line 51) | public TmdbChanges getChanges() {
    method getCollections (line 55) | public TmdbCollections getCollections() {
    method getCompanies (line 59) | public TmdbCompanies getCompanies() {
    method getConfiguration (line 63) | public TmdbConfiguration getConfiguration() {
    method getDiscover (line 67) | public TmdbDiscover getDiscover() {
    method getFind (line 71) | public TmdbFind getFind() {
    method getGenre (line 75) | public TmdbGenre getGenre() {
    method getGuestSessions (line 79) | public TmdbGuestSessions getGuestSessions() {
    method getKeywords (line 83) | public TmdbKeywords getKeywords() {
    method getLists (line 87) | public TmdbLists getLists() {
    method getMovieLists (line 91) | public TmdbMovieLists getMovieLists() {
    method getMovies (line 95) | public TmdbMovies getMovies() {
    method getNetworks (line 99) | public TmdbNetworks getNetworks() {
    method getPeopleLists (line 103) | public TmdbPeopleLists getPeopleLists() {
    method getPeople (line 107) | public TmdbPeople getPeople() {
    method getReviews (line 111) | public TmdbReviews getReviews() {
    method getSearch (line 115) | public TmdbSearch getSearch() {
    method getTrending (line 119) | public TmdbTrending getTrending() {
    method getTvEpisodes (line 123) | public TmdbTvEpisodes getTvEpisodes() {
    method getTvEpisodeGroups (line 127) | public TmdbTvEpisodeGroups getTvEpisodeGroups() {
    method getTvSeasons (line 131) | public TmdbTvSeasons getTvSeasons() {
    method getTvSeries (line 135) | public TmdbTvSeries getTvSeries() {
    method getTvSeriesLists (line 139) | public TmdbTvSeriesLists getTvSeriesLists() {
    method getWatchProviders (line 143) | public TmdbWatchProviders getWatchProviders() {

FILE: src/main/java/info/movito/themoviedbapi/TmdbAuthentication.java
  class TmdbAuthentication (line 19) | public class TmdbAuthentication extends AbstractTmdbApi {
    method TmdbAuthentication (line 27) | TmdbAuthentication(TmdbApi tmdbApi) {
    method createGuestSession (line 39) | public GuestSession createGuestSession() throws TmdbException {
    method createRequestToken (line 54) | public RequestToken createRequestToken() throws TmdbException {
    method getTmdbAuthenticationUrlForRequestToken (line 69) | public static String getTmdbAuthenticationUrlForRequestToken(RequestTo...
    method createAuthenticatedRequestToken (line 97) | public RequestToken createAuthenticatedRequestToken(RequestToken token...
    method createSession (line 122) | public Session createSession(RequestToken token) throws TmdbException {
    method deleteSession (line 145) | public ResponseStatusDelete deleteSession(String sessionId) throws Tmd...
    method validateKey (line 167) | public ResponseStatusAuthentication validateKey() throws TmdbException {

FILE: src/main/java/info/movito/themoviedbapi/TmdbCertifications.java
  class TmdbCertifications (line 11) | public class TmdbCertifications extends AbstractTmdbApi {
    method TmdbCertifications (line 18) | TmdbCertifications(TmdbApi tmdbApi) {
    method getMovieCertifications (line 29) | public CertificationResults getMovieCertifications() throws TmdbExcept...
    method getTvCertifications (line 41) | public CertificationResults getTvCertifications() throws TmdbException {

FILE: src/main/java/info/movito/themoviedbapi/TmdbChanges.java
  class TmdbChanges (line 15) | public class TmdbChanges extends AbstractTmdbApi {
    method TmdbChanges (line 27) | TmdbChanges(TmdbApi tmdbApi) {
    method getMovieChangesList (line 41) | public ChangesResultsPage getMovieChangesList(String startDate, String...
    method getPeopleChangesList (line 64) | public ChangesResultsPage getPeopleChangesList(String startDate, Strin...
    method getTvChangesList (line 87) | public ChangesResultsPage getTvChangesList(String startDate, String en...
    method calculateDaysDifference (line 107) | private static long calculateDaysDifference(String startDateString, St...

FILE: src/main/java/info/movito/themoviedbapi/TmdbCollections.java
  class TmdbCollections (line 16) | public class TmdbCollections extends AbstractTmdbApi {
    method TmdbCollections (line 22) | TmdbCollections(TmdbApi tmdbApi) {
    method getDetails (line 35) | public CollectionInfo getDetails(Integer collectionId, String language...
    method getImages (line 51) | public Images getImages(Integer collectionId, String language, String....
    method getTranslations (line 66) | public List<Translation> getTranslations(Integer collectionId) throws ...

FILE: src/main/java/info/movito/themoviedbapi/TmdbCompanies.java
  class TmdbCompanies (line 13) | public class TmdbCompanies extends AbstractTmdbApi {
    method TmdbCompanies (line 19) | TmdbCompanies(TmdbApi tmdbApi) {
    method getDetails (line 31) | public Company getDetails(Integer companyId) throws TmdbException {
    method getAlternativeNames (line 44) | public AlternativeNamesResultsPage getAlternativeNames(Integer company...
    method getImages (line 57) | public ImageResults getImages(Integer companyId) throws TmdbException {

FILE: src/main/java/info/movito/themoviedbapi/TmdbConfiguration.java
  class TmdbConfiguration (line 18) | public class TmdbConfiguration extends AbstractTmdbApi {
    method TmdbConfiguration (line 24) | TmdbConfiguration(TmdbApi tmdbApi) {
    method getDetails (line 35) | public Configuration getDetails() throws TmdbException {
    method getCountries (line 48) | public List<Country> getCountries(String language) throws TmdbException {
    method getJobs (line 62) | public List<Job> getJobs() throws TmdbException {
    method getLanguages (line 75) | public List<Language> getLanguages() throws TmdbException {
    method getPrimaryTranslations (line 89) | public List<String> getPrimaryTranslations() throws TmdbException {
    method getTimezones (line 102) | public List<Timezone> getTimezones() throws TmdbException {

FILE: src/main/java/info/movito/themoviedbapi/TmdbDiscover.java
  class TmdbDiscover (line 14) | public class TmdbDiscover extends AbstractTmdbApi {
    method TmdbDiscover (line 22) | TmdbDiscover(TmdbApi tmdbApi) {
    method getMovie (line 33) | public MovieResultsPage getMovie(DiscoverMovieParamBuilder builder) th...
    method getTv (line 46) | public TvSeriesResultsPage getTv(DiscoverTvParamBuilder builder) throw...

FILE: src/main/java/info/movito/themoviedbapi/TmdbFind.java
  class TmdbFind (line 12) | public class TmdbFind extends AbstractTmdbApi {
    method TmdbFind (line 18) | TmdbFind(TmdbApi tmdbApi) {
    method findById (line 31) | public FindResults findById(String externalId, ExternalSource external...

FILE: src/main/java/info/movito/themoviedbapi/TmdbGenre.java
  class TmdbGenre (line 14) | public class TmdbGenre extends AbstractTmdbApi {
    method TmdbGenre (line 20) | public TmdbGenre(TmdbApi tmdbApi) {
    method getMovieList (line 32) | public List<Genre> getMovieList(String language) throws TmdbException {
    method getTvList (line 46) | public List<Genre> getTvList(String language) throws TmdbException {

FILE: src/main/java/info/movito/themoviedbapi/TmdbGuestSessions.java
  class TmdbGuestSessions (line 14) | public class TmdbGuestSessions extends AbstractTmdbApi {
    method TmdbGuestSessions (line 20) | public TmdbGuestSessions(TmdbApi tmdbApi) {
    method getRatedMovies (line 35) | public RatedMovieResultsPage getRatedMovies(int guestSessionId, String...
    method getRatedTvSeries (line 56) | public RatedTvSeriesResultsPage getRatedTvSeries(int guestSessionId, S...
    method getRatedTvEpisodes (line 77) | public RatedTvEpisodeResultsPage getRatedTvEpisodes(int guestSessionId...

FILE: src/main/java/info/movito/themoviedbapi/TmdbKeywords.java
  class TmdbKeywords (line 13) | public class TmdbKeywords extends AbstractTmdbApi {
    method TmdbKeywords (line 19) | TmdbKeywords(TmdbApi tmdbApi) {
    method getDetails (line 30) | public Keyword getDetails(int keywordId) throws TmdbException {
    method getKeywordMovies (line 41) | @Deprecated

FILE: src/main/java/info/movito/themoviedbapi/TmdbLists.java
  class TmdbLists (line 18) | public class TmdbLists extends AbstractTmdbApi {
    method TmdbLists (line 24) | public TmdbLists(TmdbApi tmdbApi) {
    method addMovie (line 38) | public ResponseStatus addMovie(Integer listId, String sessionId, Integ...
    method checkItemStatus (line 59) | public ListItemStatus checkItemStatus(Integer listId, String language,...
    method clear (line 76) | public ResponseStatus clear(Integer listId, String sessionId, Boolean ...
    method create (line 94) | public MovieListCreationStatus create(String sessionId, String name, S...
    method delete (line 116) | public ResponseStatus delete(Integer listId, String sessionId) throws ...
    method getDetails (line 132) | public ListDetails getDetails(Integer listId, String language, Integer...
    method removeMovie (line 149) | public ResponseStatus removeMovie(Integer listId, String sessionId, In...

FILE: src/main/java/info/movito/themoviedbapi/TmdbMovieLists.java
  class TmdbMovieLists (line 12) | public class TmdbMovieLists extends AbstractTmdbApi {
    method TmdbMovieLists (line 18) | TmdbMovieLists(TmdbApi tmdbApi) {
    method getNowPlaying (line 32) | public MovieResultsPageWithDates getNowPlaying(String language, Intege...
    method getPopular (line 50) | public MovieResultsPage getPopular(String language, Integer page, Stri...
    method getTopRated (line 68) | public MovieResultsPage getTopRated(String language, Integer page, Str...
    method getUpcoming (line 86) | public MovieResultsPageWithDates getUpcoming(String language, Integer ...

FILE: src/main/java/info/movito/themoviedbapi/TmdbMovies.java
  class TmdbMovies (line 31) | public class TmdbMovies extends AbstractTmdbApi {
    method TmdbMovies (line 37) | public TmdbMovies(TmdbApi tmdbApi) {
    method getDetails (line 51) | public MovieDb getDetails(int movieId, String language, MovieAppendToR...
    method getAccountStates (line 68) | public AccountStates getAccountStates(int movieId, String sessionId, S...
    method getAlternativeTitles (line 84) | public AlternativeTitles getAlternativeTitles(int movieId, String coun...
    method getChanges (line 101) | public ChangeResults getChanges(int movieId, String startDate, String ...
    method getCredits (line 118) | public Credits getCredits(int movieId, String language) throws TmdbExc...
    method getExternalIds (line 132) | public ExternalIds getExternalIds(int movieId) throws TmdbException {
    method getImages (line 147) | public Images getImages(int movieId, String language, String... includ...
    method getKeywords (line 162) | public KeywordResults getKeywords(int movieId) throws TmdbException {
    method getLatest (line 174) | public MovieDb getLatest() throws TmdbException {
    method getLists (line 189) | public MovieListResultsPage getLists(int movieId, String language, Int...
    method getRecommendations (line 206) | public MovieResultsPage getRecommendations(int movieId, String languag...
    method getReleaseDates (line 221) | public ReleaseDateResults getReleaseDates(int movieId) throws TmdbExce...
    method getReviews (line 236) | public ReviewResultsPage getReviews(int movieId, String language, Inte...
    method getSimilar (line 253) | public MovieResultsPage getSimilar(int movieId, String language, Integ...
    method getTranslations (line 268) | public Translations getTranslations(int movieId) throws TmdbException {
    method getVideos (line 282) | public VideoResults getVideos(int movieId, String language) throws Tmd...
    method getWatchProviders (line 298) | public ProviderResults getWatchProviders(int movieId) throws TmdbExcep...
    method addRating (line 316) | public ResponseStatus addRating(int movieId, String guestSessionId, St...
    method deleteRating (line 344) | public ResponseStatus deleteRating(int movieId, String guestSessionId,...

FILE: src/main/java/info/movito/themoviedbapi/TmdbNetworks.java
  class TmdbNetworks (line 13) | public class TmdbNetworks extends AbstractTmdbApi {
    method TmdbNetworks (line 19) | public TmdbNetworks(TmdbApi tmdbApi) {
    method getDetails (line 31) | public Network getDetails(int networkId) throws TmdbException {
    method getAlternativeNames (line 44) | public AlternativeNamesResults getAlternativeNames(int networkId) thro...
    method getImages (line 57) | public ImageResults getImages(int networkId) throws TmdbException {

FILE: src/main/java/info/movito/themoviedbapi/TmdbPeople.java
  class TmdbPeople (line 19) | public class TmdbPeople extends AbstractTmdbApi {
    method TmdbPeople (line 25) | TmdbPeople(TmdbApi tmdbApi) {
    method getDetails (line 39) | public PersonDb getDetails(int personId, String language, PersonAppend...
    method getChanges (line 57) | public ChangeResults getChanges(int personId, String startDate, String...
    method getCombinedCredits (line 74) | public CombinedPersonCredits getCombinedCredits(int personId, String l...
    method getExternalIds (line 88) | public ExternalIds getExternalIds(int personId) throws TmdbException {
    method getImages (line 101) | public PersonImages getImages(int personId) throws TmdbException {
    method getLatest (line 113) | public PersonDb getLatest() throws TmdbException {
    method getMovieCredits (line 127) | public MovieCredits getMovieCredits(int personId, String language) thr...
    method getTvCredits (line 142) | public TvCredits getTvCredits(int personId, String language) throws Tm...
    method getTranslations (line 156) | public Translations getTranslations(int personId) throws TmdbException {

FILE: src/main/java/info/movito/themoviedbapi/TmdbPeopleLists.java
  class TmdbPeopleLists (line 11) | public class TmdbPeopleLists extends AbstractTmdbApi {
    method TmdbPeopleLists (line 14) | TmdbPeopleLists(TmdbApi tmdbApi) {
    method getPopular (line 27) | public PopularPersonResultsPage getPopular(String language, Integer pa...

FILE: src/main/java/info/movito/themoviedbapi/TmdbReviews.java
  class TmdbReviews (line 11) | public class TmdbReviews extends AbstractTmdbApi {
    method TmdbReviews (line 17) | TmdbReviews(TmdbApi tmdbApi) {
    method getDetails (line 28) | public Review getDetails(int reviewId) throws TmdbException {

FILE: src/main/java/info/movito/themoviedbapi/TmdbSearch.java
  class TmdbSearch (line 22) | public class TmdbSearch extends AbstractTmdbApi {
    method TmdbSearch (line 31) | public TmdbSearch(TmdbApi tmdbApi) {
    method searchCollection (line 47) | public CollectionResultsPage searchCollection(String query, String lan...
    method searchCompany (line 67) | public CompanyResultsPage searchCompany(String query, Integer page) th...
    method searchKeyword (line 83) | public KeywordResultsPage searchKeyword(String query, Integer page) th...
    method searchMovie (line 104) | public MovieResultsPage searchMovie(String query, Boolean includeAdult...
    method searchMulti (line 128) | public MultiResultsPage searchMulti(String query, Boolean includeAdult...
    method searchPerson (line 148) | public PopularPersonResultsPage searchPerson(String query, Boolean inc...
    method searchTv (line 170) | public TvSeriesResultsPage searchTv(String query, Integer firstAirDate...

FILE: src/main/java/info/movito/themoviedbapi/TmdbTrending.java
  class TmdbTrending (line 15) | public class TmdbTrending extends AbstractTmdbApi {
    method TmdbTrending (line 21) | TmdbTrending(TmdbApi tmdbApi) {
    method getAll (line 34) | public MultiResultsPage getAll(TimeWindow timeWindow, String language)...
    method getAll (line 48) | public MultiResultsPage getAll(TimeWindow timeWindow, String language,...
    method getMovies (line 64) | public MovieResultsPage getMovies(TimeWindow timeWindow, String langua...
    method getMovies (line 78) | public MovieResultsPage getMovies(TimeWindow timeWindow, String langua...
    method getPeople (line 94) | public PopularPersonResultsPage getPeople(TimeWindow timeWindow, Strin...
    method getPeople (line 108) | public PopularPersonResultsPage getPeople(TimeWindow timeWindow, Strin...
    method getTv (line 124) | public TvSeriesResultsPage getTv(TimeWindow timeWindow, String languag...
    method getTv (line 138) | public TvSeriesResultsPage getTv(TimeWindow timeWindow, String languag...

FILE: src/main/java/info/movito/themoviedbapi/TmdbTvEpisodeGroups.java
  class TmdbTvEpisodeGroups (line 11) | public class TmdbTvEpisodeGroups extends AbstractTmdbApi {
    method TmdbTvEpisodeGroups (line 17) | TmdbTvEpisodeGroups(TmdbApi tmdbApi) {
    method getDetails (line 29) | public TvEpisodeGroups getDetails(String tvEpisodeGroupId) throws Tmdb...

FILE: src/main/java/info/movito/themoviedbapi/TmdbTvEpisodes.java
  class TmdbTvEpisodes (line 27) | public class TmdbTvEpisodes extends AbstractTmdbApi {
    method TmdbTvEpisodes (line 33) | TmdbTvEpisodes(TmdbApi tmdbApi) {
    method getDetails (line 49) | public TvEpisodeDb getDetails(int seriesId, int seasonNumber, int epis...
    method getAccountStates (line 69) | public AccountStates getAccountStates(int seriesId, int seasonNumber, ...
    method getChanges (line 86) | public ChangeResults getChanges(int episodeId)
    method getCredits (line 103) | public EpisodeCredits getCredits(int seriesId, int seasonNumber, int e...
    method getExternalIds (line 121) | public ExternalIds getExternalIds(int seriesId, int seasonNumber, int ...
    method getImages (line 140) | public Images getImages(int seriesId, int seasonNumber, int episodeNum...
    method getTranslations (line 159) | public Translations getTranslations(int seriesId, int seasonNumber, in...
    method getVideos (line 178) | public VideoResults getVideos(int seriesId, int seasonNumber, int epis...
    method addRating (line 202) | public ResponseStatus addRating(int seriesId, int seasonNumber, int ep...
    method deleteRating (line 234) | public ResponseStatus deleteRating(int seriesId, int seasonNumber, int...

FILE: src/main/java/info/movito/themoviedbapi/TmdbTvSeasons.java
  class TmdbTvSeasons (line 23) | public class TmdbTvSeasons extends AbstractTmdbApi {
    method TmdbTvSeasons (line 29) | TmdbTvSeasons(TmdbApi tmdbApi) {
    method getDetails (line 44) | public TvSeasonDb getDetails(int seriesId, int seasonNumber, String la...
    method getAccountStates (line 63) | public AccountStateResults getAccountStates(int seriesId, int seasonNu...
    method getAggregateCredits (line 81) | public AggregateCredits getAggregateCredits(int seriesId, int seasonNu...
    method getChanges (line 98) | public ChangeResults getChanges(int seasonId, String startDate, String...
    method getCredits (line 116) | public Credits getCredits(int seriesId, int seasonNumber, String langu...
    method getExternalIds (line 131) | public ExternalIds getExternalIds(int seriesId, int seasonNumber) thro...
    method getImages (line 147) | public Images getImages(int seriesId, int seasonNumber, String languag...
    method getTranslations (line 163) | public Translations getTranslations(int seriesId, int seasonNumber) th...
    method getVideos (line 179) | public VideoResults getVideos(int seriesId, int seasonNumber, String l...
    method getWatchProviders (line 198) | public ProviderResults getWatchProviders(int seriesId, int seasonNumbe...

FILE: src/main/java/info/movito/themoviedbapi/TmdbTvSeries.java
  class TmdbTvSeries (line 34) | public class TmdbTvSeries extends AbstractTmdbApi {
    method TmdbTvSeries (line 40) | TmdbTvSeries(TmdbApi tmdbApi) {
    method getDetails (line 54) | public TvSeriesDb getDetails(int seriesId, String language, TvSeriesAp...
    method getAccountStates (line 71) | public AccountStates getAccountStates(int seriesId, String sessionId, ...
    method getAggregateCredits (line 86) | public AggregateCredits getAggregateCredits(int seriesId, String langu...
    method getAlternativeTitles (line 100) | public AlternativeTitleResults getAlternativeTitles(int seriesId) thro...
    method getChanges (line 116) | public ChangeResults getChanges(int seriesId, String startDate, String...
    method getContentRatings (line 132) | public ContentRatingResults getContentRatings(int seriesId) throws Tmd...
    method getCredits (line 146) | public Credits getCredits(int seriesId, String language) throws TmdbEx...
    method getEpisodeGroups (line 160) | public EpisodeGroupResults getEpisodeGroups(int seriesId) throws TmdbE...
    method getExternalIds (line 173) | public ExternalIds getExternalIds(int seriesId) throws TmdbException {
    method getImages (line 188) | public Images getImages(int seriesId, String language, String... inclu...
    method getKeywords (line 203) | public TvKeywords getKeywords(int seriesId) throws TmdbException {
    method getLatest (line 215) | public TvSeriesDb getLatest() throws TmdbException {
    method getLists (line 230) | public TvSeriesListResultsPage getLists(int seriesId, String language,...
    method getRecommendations (line 247) | public TvSeriesResultsPage getRecommendations(int seriesId, String lan...
    method getReviews (line 264) | public ReviewResultsPage getReviews(int seriesId, String language, Int...
    method getScreenedTheatrically (line 279) | public ScreenedTheatricallyResults getScreenedTheatrically(int seriesI...
    method getSimilar (line 294) | public TvSeriesResultsPage getSimilar(int seriesId, String language, I...
    method getTranslations (line 309) | public Translations getTranslations(int seriesId) throws TmdbException {
    method getVideos (line 324) | public VideoResults getVideos(int seriesId, String language, String......
    method getWatchProviders (line 341) | public ProviderResults getWatchProviders(int seriesId) throws TmdbExce...
    method addRating (line 359) | public ResponseStatus addRating(int seriesId, String guestSessionId, S...
    method deleteRating (line 387) | public ResponseStatus deleteRating(int seriesId, String guestSessionId...

FILE: src/main/java/info/movito/themoviedbapi/TmdbTvSeriesLists.java
  class TmdbTvSeriesLists (line 13) | public class TmdbTvSeriesLists extends AbstractTmdbApi {
    method TmdbTvSeriesLists (line 17) | TmdbTvSeriesLists(TmdbApi tmdbApi) {
    method getAiringToday (line 31) | public TvSeriesResultsPage getAiringToday(String language, Integer pag...
    method getOnTheAir (line 49) | public TvSeriesResultsPage getOnTheAir(String language, Integer page, ...
    method getPopular (line 66) | public TvSeriesResultsPage getPopular(String language, Integer page) t...
    method getTopRated (line 82) | public TvSeriesResultsPage getTopRated(String language, Integer page) ...

FILE: src/main/java/info/movito/themoviedbapi/TmdbWatchProviders.java
  class TmdbWatchProviders (line 12) | public class TmdbWatchProviders extends AbstractTmdbApi {
    method TmdbWatchProviders (line 18) | TmdbWatchProviders(TmdbApi tmdbApi) {
    method getAvailableRegions (line 29) | public AvailableRegionResults getAvailableRegions(String language) thr...
    method getMovieProviders (line 43) | public ProviderResults getMovieProviders(String language, String watch...
    method getTvProviders (line 60) | public ProviderResults getTvProviders(String language, String watchReg...

FILE: src/main/java/info/movito/themoviedbapi/model/account/Account.java
  class Account (line 8) | @EqualsAndHashCode(callSuper = true)

FILE: src/main/java/info/movito/themoviedbapi/model/account/Avatar.java
  class Avatar (line 11) | @Data
    method getGravatarHash (line 20) | public String getGravatarHash() {
    method getTmdbAvatarPath (line 24) | public String getTmdbAvatarPath() {

FILE: src/main/java/info/movito/themoviedbapi/model/authentication/GuestSession.java
  class GuestSession (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/authentication/RequestToken.java
  class RequestToken (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/authentication/Session.java
  class Session (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/certifications/Certification.java
  class Certification (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/certifications/CertificationResults.java
  class CertificationResults (line 12) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/changes/Change.java
  class Change (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/changes/ChangesResultsPage.java
  class ChangesResultsPage (line 5) | public class ChangesResultsPage extends ResultsPage<Change> {

FILE: src/main/java/info/movito/themoviedbapi/model/collections/CollectionInfo.java
  class CollectionInfo (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/collections/Data.java
  class Data (line 7) | @lombok.Data

FILE: src/main/java/info/movito/themoviedbapi/model/collections/Images.java
  class Images (line 12) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/collections/Part.java
  class Part (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/collections/Translation.java
  class Translation (line 7) | @lombok.Data

FILE: src/main/java/info/movito/themoviedbapi/model/collections/Translations.java
  class Translations (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/companies/AlternativeNamesResultsPage.java
  class AlternativeNamesResultsPage (line 6) | public class AlternativeNamesResultsPage extends Results<AlternativeName> {

FILE: src/main/java/info/movito/themoviedbapi/model/companies/Company.java
  class Company (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/configuration/Configuration.java
  class Configuration (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/configuration/Country.java
  class Country (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/configuration/ImageConfig.java
  class ImageConfig (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/configuration/Job.java
  class Job (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/configuration/Timezone.java
  class Timezone (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/AbstractJsonMapping.java
  class AbstractJsonMapping (line 14) | public abstract class AbstractJsonMapping implements Serializable {
    method getNewItems (line 25) | @JsonAnyGetter
    method setNewItems (line 30) | @JsonAnySetter

FILE: src/main/java/info/movito/themoviedbapi/model/core/AccountStates.java
  class AccountStates (line 7) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/AlternativeName.java
  class AlternativeName (line 7) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/AlternativeTitle.java
  class AlternativeTitle (line 7) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/Genre.java
  class Genre (line 5) | @JsonRootName("genre")

FILE: src/main/java/info/movito/themoviedbapi/model/core/Genres.java
  class Genres (line 10) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/IdElement.java
  class IdElement (line 12) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/Language.java
  class Language (line 7) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/Movie.java
  class Movie (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/MovieDbResultsPage.java
  class MovieDbResultsPage (line 5) | public class MovieDbResultsPage extends ResultsPage<MovieDb> {

FILE: src/main/java/info/movito/themoviedbapi/model/core/MovieResultsPage.java
  class MovieResultsPage (line 3) | public class MovieResultsPage extends ResultsPage<Movie> {

FILE: src/main/java/info/movito/themoviedbapi/model/core/NamedElement.java
  class NamedElement (line 7) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/NamedIdElement.java
  class NamedIdElement (line 7) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/NamedStringIdElement.java
  class NamedStringIdElement (line 7) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/ProductionCompany.java
  class ProductionCompany (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/ProductionCountry.java
  class ProductionCountry (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/Results.java
  class Results (line 11) | @Data
    method iterator (line 17) | @Override

FILE: src/main/java/info/movito/themoviedbapi/model/core/ResultsPage.java
  class ResultsPage (line 7) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/Review.java
  class Review (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/ReviewResultsPage.java
  class ReviewResultsPage (line 3) | public class ReviewResultsPage extends ResultsPage<Review> {

FILE: src/main/java/info/movito/themoviedbapi/model/core/StringIdElement.java
  class StringIdElement (line 12) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/TvKeywords.java
  class TvKeywords (line 7) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/TvSeries.java
  class TvSeries (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/TvSeriesResultsPage.java
  class TvSeriesResultsPage (line 3) | public class TvSeriesResultsPage extends ResultsPage<TvSeries> {

FILE: src/main/java/info/movito/themoviedbapi/model/core/image/Artwork.java
  class Artwork (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/image/Image.java
  class Image (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/image/ImageResults.java
  class ImageResults (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/multi/Multi.java
  type Multi (line 14) | @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "media_type")
    method getMediaType (line 24) | MediaType getMediaType();
    type MediaType (line 29) | enum MediaType {

FILE: src/main/java/info/movito/themoviedbapi/model/core/multi/MultiMovie.java
  class MultiMovie (line 7) | @Data
    method getMediaType (line 10) | @Override

FILE: src/main/java/info/movito/themoviedbapi/model/core/multi/MultiPerson.java
  class MultiPerson (line 7) | @Data
    method getMediaType (line 10) | @Override

FILE: src/main/java/info/movito/themoviedbapi/model/core/multi/MultiResultsPage.java
  class MultiResultsPage (line 5) | public class MultiResultsPage extends ResultsPage<Multi> {

FILE: src/main/java/info/movito/themoviedbapi/model/core/multi/MultiTvSeries.java
  class MultiTvSeries (line 7) | @Data
    method getMediaType (line 10) | @Override

FILE: src/main/java/info/movito/themoviedbapi/model/core/popularperson/KnownFor.java
  class KnownFor (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/popularperson/PopularPerson.java
  class PopularPerson (line 12) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/popularperson/PopularPersonResultsPage.java
  class PopularPersonResultsPage (line 5) | public class PopularPersonResultsPage extends ResultsPage<PopularPerson> {

FILE: src/main/java/info/movito/themoviedbapi/model/core/responses/ResponseStatus.java
  class ResponseStatus (line 9) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/responses/ResponseStatusAuthentication.java
  class ResponseStatusAuthentication (line 7) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/responses/ResponseStatusDelete.java
  class ResponseStatusDelete (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/responses/TmdbResponseException.java
  class TmdbResponseException (line 8) | @Getter
    method TmdbResponseException (line 13) | public TmdbResponseException(TmdbResponseCode responseCode) {
    method TmdbResponseException (line 18) | public TmdbResponseException(String message) {
    method TmdbResponseException (line 23) | public TmdbResponseException(Exception exception) {

FILE: src/main/java/info/movito/themoviedbapi/model/core/video/Video.java
  class Video (line 9) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/video/VideoResults.java
  class VideoResults (line 5) | public class VideoResults extends Results<Video> {

FILE: src/main/java/info/movito/themoviedbapi/model/core/watchproviders/Provider.java
  class Provider (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/watchproviders/ProviderResults.java
  class ProviderResults (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/core/watchproviders/WatchProviders.java
  class WatchProviders (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/find/FindMovie.java
  class FindMovie (line 7) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/find/FindPerson.java
  class FindPerson (line 7) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/find/FindResults.java
  class FindResults (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/find/FindTvEpisode.java
  class FindTvEpisode (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/find/FindTvSeason.java
  class FindTvSeason (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/find/FindTvSeries.java
  class FindTvSeries (line 7) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/keywords/Keyword.java
  class Keyword (line 6) | @JsonRootName("keyword")

FILE: src/main/java/info/movito/themoviedbapi/model/lists/ListDetails.java
  class ListDetails (line 12) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/lists/ListItemStatus.java
  class ListItemStatus (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/lists/MovieListCreationStatus.java
  class MovieListCreationStatus (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movielists/Dates.java
  class Dates (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movielists/MovieResultsPageWithDates.java
  class MovieResultsPageWithDates (line 9) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/AlternativeTitles.java
  class AlternativeTitles (line 12) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/BelongsToCollection.java
  class BelongsToCollection (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/Cast.java
  class Cast (line 9) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/Credits.java
  class Credits (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/Crew.java
  class Crew (line 9) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/Data.java
  class Data (line 7) | @lombok.Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/ExternalIds.java
  class ExternalIds (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/Images.java
  class Images (line 12) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/KeywordResults.java
  class KeywordResults (line 12) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/MovieDb.java
  class MovieDb (line 22) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/MovieList.java
  class MovieList (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/MovieListResultsPage.java
  class MovieListResultsPage (line 5) | public class MovieListResultsPage extends ResultsPage<MovieList> {

FILE: src/main/java/info/movito/themoviedbapi/model/movies/ReleaseDate.java
  class ReleaseDate (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/ReleaseDateResults.java
  class ReleaseDateResults (line 5) | public class ReleaseDateResults extends Results<ReleaseInfo> {

FILE: src/main/java/info/movito/themoviedbapi/model/movies/ReleaseInfo.java
  class ReleaseInfo (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/ReleaseType.java
  type ReleaseType (line 5) | public enum ReleaseType {
    method toValue (line 13) | @JsonValue

FILE: src/main/java/info/movito/themoviedbapi/model/movies/Translation.java
  class Translation (line 7) | @lombok.Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/Translations.java
  class Translations (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/changes/Change.java
  class Change (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/changes/ChangeItem.java
  class ChangeItem (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/movies/changes/ChangeResults.java
  class ChangeResults (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/networks/AlternativeNamesResults.java
  class AlternativeNamesResults (line 6) | public class AlternativeNamesResults extends Results<AlternativeName> {

FILE: src/main/java/info/movito/themoviedbapi/model/networks/Network.java
  class Network (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/people/Data.java
  class Data (line 7) | @lombok.Data

FILE: src/main/java/info/movito/themoviedbapi/model/people/ExternalIds.java
  class ExternalIds (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/people/Gender.java
  type Gender (line 5) | public enum Gender {
    method toValue (line 11) | @JsonValue

FILE: src/main/java/info/movito/themoviedbapi/model/people/PersonDb.java
  class PersonDb (line 16) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/people/PersonImages.java
  class PersonImages (line 12) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/people/Translation.java
  class Translation (line 7) | @lombok.Data

FILE: src/main/java/info/movito/themoviedbapi/model/people/Translations.java
  class Translations (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/people/credits/Cast.java
  type Cast (line 6) | @JsonTypeInfo(use = JsonTypeInfo.Id.DEDUCTION)
    method getMediaType (line 15) | MediaType getMediaType();

FILE: src/main/java/info/movito/themoviedbapi/model/people/credits/CombinedPersonCredits.java
  class CombinedPersonCredits (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/people/credits/Crew.java
  type Crew (line 6) | @JsonTypeInfo(use = JsonTypeInfo.Id.DEDUCTION)
    method getMediaType (line 15) | MediaType getMediaType();

FILE: src/main/java/info/movito/themoviedbapi/model/people/credits/MediaType.java
  type MediaType (line 5) | public enum MediaType {

FILE: src/main/java/info/movito/themoviedbapi/model/people/credits/MovieCast.java
  class MovieCast (line 12) | @Data
    method getMediaType (line 64) | @Override

FILE: src/main/java/info/movito/themoviedbapi/model/people/credits/MovieCredits.java
  class MovieCredits (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/people/credits/MovieCrew.java
  class MovieCrew (line 12) | @Data
    method getMediaType (line 64) | @Override

FILE: src/main/java/info/movito/themoviedbapi/model/people/credits/TvCast.java
  class TvCast (line 12) | @Data
    method getMediaType (line 61) | @Override

FILE: src/main/java/info/movito/themoviedbapi/model/people/credits/TvCredits.java
  class TvCredits (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/people/credits/TvCrew.java
  class TvCrew (line 12) | @Data
    method getMediaType (line 64) | @Override

FILE: src/main/java/info/movito/themoviedbapi/model/rated/RatedMovie.java
  class RatedMovie (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/rated/RatedMovieResultsPage.java
  class RatedMovieResultsPage (line 5) | public class RatedMovieResultsPage extends ResultsPage<RatedMovie> {

FILE: src/main/java/info/movito/themoviedbapi/model/rated/RatedTvEpisode.java
  class RatedTvEpisode (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/rated/RatedTvEpisodeResultsPage.java
  class RatedTvEpisodeResultsPage (line 5) | public class RatedTvEpisodeResultsPage extends ResultsPage<RatedTvEpisod...

FILE: src/main/java/info/movito/themoviedbapi/model/rated/RatedTvSeries.java
  class RatedTvSeries (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/rated/RatedTvSeriesResultsPage.java
  class RatedTvSeriesResultsPage (line 5) | public class RatedTvSeriesResultsPage extends ResultsPage<RatedTvSeries> {

FILE: src/main/java/info/movito/themoviedbapi/model/reviews/AuthorDetails.java
  class AuthorDetails (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/reviews/Review.java
  class Review (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/search/Collection.java
  class Collection (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/search/CollectionResultsPage.java
  class CollectionResultsPage (line 5) | public class CollectionResultsPage extends ResultsPage<Collection> {

FILE: src/main/java/info/movito/themoviedbapi/model/search/Company.java
  class Company (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/search/CompanyResultsPage.java
  class CompanyResultsPage (line 5) | public class CompanyResultsPage extends ResultsPage<Company> {

FILE: src/main/java/info/movito/themoviedbapi/model/search/KeywordResultsPage.java
  class KeywordResultsPage (line 6) | public class KeywordResultsPage extends ResultsPage<Keyword> {

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/Change.java
  class Change (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/ChangeItem.java
  class ChangeItem (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/ChangeResults.java
  class ChangeResults (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/Data.java
  class Data (line 7) | @lombok.Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/Network.java
  class Network (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/Translation.java
  class Translation (line 7) | @lombok.Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/Translations.java
  class Translations (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/TvEpisode.java
  class TvEpisode (line 9) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/TvSeason.java
  class TvSeason (line 9) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/credits/AggregateCast.java
  class AggregateCast (line 13) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/credits/AggregateCredits.java
  class AggregateCredits (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/credits/AggregateCrew.java
  class AggregateCrew (line 13) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/credits/Cast.java
  class Cast (line 9) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/credits/Credits.java
  class Credits (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/core/credits/Crew.java
  class Crew (line 9) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/episode/EpisodeCredits.java
  class EpisodeCredits (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/episode/ExternalIds.java
  class ExternalIds (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/episode/GuestStar.java
  class GuestStar (line 9) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/episode/Images.java
  class Images (line 12) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/episode/TvEpisodeDb.java
  class TvEpisodeDb (line 15) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/episodegroups/EpisodeGroupType.java
  type EpisodeGroupType (line 5) | public enum EpisodeGroupType {
    method toValue (line 14) | @JsonValue

FILE: src/main/java/info/movito/themoviedbapi/model/tv/episodegroups/OrderedTvEpisode.java
  class OrderedTvEpisode (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/episodegroups/TvEpisodeGroup.java
  class TvEpisodeGroup (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/episodegroups/TvEpisodeGroups.java
  class TvEpisodeGroups (line 12) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/season/AccountState.java
  class AccountState (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/season/AccountStateResults.java
  class AccountStateResults (line 7) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/season/Change.java
  class Change (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/season/ChangeItem.java
  class ChangeItem (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/season/ChangeResults.java
  class ChangeResults (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/season/ExternalIds.java
  class ExternalIds (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/season/Images.java
  class Images (line 12) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/season/TvSeasonDb.java
  class TvSeasonDb (line 16) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/season/TvSeasonEpisode.java
  class TvSeasonEpisode (line 13) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/AlternativeTitleResults.java
  class AlternativeTitleResults (line 6) | public class AlternativeTitleResults extends Results<AlternativeTitle> {

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/ContentRating.java
  class ContentRating (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/ContentRatingResults.java
  class ContentRatingResults (line 5) | public class ContentRatingResults extends Results<ContentRating> {

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/CreatedBy.java
  class CreatedBy (line 9) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/Data.java
  class Data (line 7) | @lombok.Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/EpisodeGroup.java
  class EpisodeGroup (line 9) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/EpisodeGroupResults.java
  class EpisodeGroupResults (line 5) | public class EpisodeGroupResults extends Results<EpisodeGroup> {

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/ExternalIds.java
  class ExternalIds (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/Images.java
  class Images (line 12) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/Job.java
  class Job (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/Role.java
  class Role (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/ScreenedTheatrically.java
  class ScreenedTheatrically (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/ScreenedTheatricallyResults.java
  class ScreenedTheatricallyResults (line 5) | public class ScreenedTheatricallyResults extends Results<ScreenedTheatri...

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/Translation.java
  class Translation (line 7) | @lombok.Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/Translations.java
  class Translations (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/TvSeriesDb.java
  class TvSeriesDb (line 31) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/TvSeriesList.java
  class TvSeriesList (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/tv/series/TvSeriesListResultsPage.java
  class TvSeriesListResultsPage (line 5) | public class TvSeriesListResultsPage extends ResultsPage<TvSeriesList> {

FILE: src/main/java/info/movito/themoviedbapi/model/watchproviders/AvailableRegion.java
  class AvailableRegion (line 8) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/watchproviders/AvailableRegionResults.java
  class AvailableRegionResults (line 5) | public class AvailableRegionResults extends Results<AvailableRegion> {

FILE: src/main/java/info/movito/themoviedbapi/model/watchproviders/Provider.java
  class Provider (line 11) | @Data

FILE: src/main/java/info/movito/themoviedbapi/model/watchproviders/ProviderResults.java
  class ProviderResults (line 5) | public class ProviderResults extends Results<Provider> {

FILE: src/main/java/info/movito/themoviedbapi/tools/ApiUrl.java
  class ApiUrl (line 23) | public class ApiUrl {
    method ApiUrl (line 35) | public ApiUrl(Object... urlElements) {
    method buildUrl (line 60) | public String buildUrl() {
    method addPathParam (line 77) | public ApiUrl addPathParam(String name, Object value) {
    method addPathParam (line 88) | public ApiUrl addPathParam(String name, String value) {
    method addPathParams (line 112) | public ApiUrl addPathParams(ParamBuilder paramBuilder) {
    method addQueryParam (line 130) | public ApiUrl addQueryParam(String key, Object value) {
    method addQueryParamCommandSeparated (line 144) | public ApiUrl addQueryParamCommandSeparated(String key, String... valu...
    method addPage (line 157) | public ApiUrl addPage(Integer page) {
    method addLanguage (line 170) | public ApiUrl addLanguage(String language) {
    method addAppendToResponses (line 183) | public ApiUrl addAppendToResponses(AppendToResponse... appendToRespons...
    method addSortBy (line 199) | public ApiUrl addSortBy(SortBy sortBy) {

FILE: src/main/java/info/movito/themoviedbapi/tools/RequestType.java
  type RequestType (line 6) | public enum RequestType {

FILE: src/main/java/info/movito/themoviedbapi/tools/TmdbException.java
  class TmdbException (line 6) | public class TmdbException extends Exception {
    method TmdbException (line 7) | public TmdbException(String message) {
    method TmdbException (line 11) | public TmdbException(Exception exception) {

FILE: src/main/java/info/movito/themoviedbapi/tools/TmdbHttpClient.java
  class TmdbHttpClient (line 17) | @AllArgsConstructor
    method readUrl (line 25) | @Override

FILE: src/main/java/info/movito/themoviedbapi/tools/TmdbResponseCode.java
  type TmdbResponseCode (line 15) | @Getter
    method fromCode (line 80) | @JsonCreator
    method getErrorResponses (line 91) | public static Set<TmdbResponseCode> getErrorResponses() {
    method getSuccessResponses (line 100) | public static Set<TmdbResponseCode> getSuccessResponses() {
    method getErrorCodes (line 109) | public static Set<Integer> getErrorCodes() {
    method getSuccessCodes (line 118) | public static Set<Integer> getSuccessCodes() {

FILE: src/main/java/info/movito/themoviedbapi/tools/TmdbUrlReader.java
  type TmdbUrlReader (line 8) | public interface TmdbUrlReader {
    method readUrl (line 18) | String readUrl(String url, String jsonBody, RequestType requestType) t...

FILE: src/main/java/info/movito/themoviedbapi/tools/appendtoresponse/AppendToResponse.java
  type AppendToResponse (line 7) | public interface AppendToResponse {
    method getValue (line 13) | String getValue();

FILE: src/main/java/info/movito/themoviedbapi/tools/appendtoresponse/MovieAppendToResponse.java
  type MovieAppendToResponse (line 6) | public enum MovieAppendToResponse implements AppendToResponse {
    method MovieAppendToResponse (line 25) | MovieAppendToResponse(String value) {
    method getValue (line 29) | @Override

FILE: src/main/java/info/movito/themoviedbapi/tools/appendtoresponse/PersonAppendToResponse.java
  type PersonAppendToResponse (line 6) | public enum PersonAppendToResponse implements AppendToResponse {
    method PersonAppendToResponse (line 18) | PersonAppendToResponse(String value) {
    method getValue (line 22) | @Override

FILE: src/main/java/info/movito/themoviedbapi/tools/appendtoresponse/TvEpisodesAppendToResponse.java
  type TvEpisodesAppendToResponse (line 6) | public enum TvEpisodesAppendToResponse implements AppendToResponse {
    method TvEpisodesAppendToResponse (line 16) | TvEpisodesAppendToResponse(String value) {
    method getValue (line 20) | @Override

FILE: src/main/java/info/movito/themoviedbapi/tools/appendtoresponse/TvSeasonsAppendToResponse.java
  type TvSeasonsAppendToResponse (line 6) | public enum TvSeasonsAppendToResponse implements AppendToResponse {
    method TvSeasonsAppendToResponse (line 18) | TvSeasonsAppendToResponse(String value) {
    method getValue (line 22) | @Override

FILE: src/main/java/info/movito/themoviedbapi/tools/appendtoresponse/TvSeriesAppendToResponse.java
  type TvSeriesAppendToResponse (line 6) | public enum TvSeriesAppendToResponse implements AppendToResponse {
    method TvSeriesAppendToResponse (line 28) | TvSeriesAppendToResponse(String value) {
    method getValue (line 32) | @Override

FILE: src/main/java/info/movito/themoviedbapi/tools/builders/ParamBuilder.java
  type ParamBuilder (line 9) | public interface ParamBuilder {
    method getParameterMap (line 15) | Map<String, String> getParameterMap();

FILE: src/main/java/info/movito/themoviedbapi/tools/builders/discover/DiscoverMovieParamBuilder.java
  class DiscoverMovieParamBuilder (line 13) | public class DiscoverMovieParamBuilder extends DiscoverParamBuilder<Disc...
    method me (line 31) | @Override
    method certification (line 36) | public DiscoverMovieParamBuilder certification(String certification) {
    method certificationGte (line 45) | public DiscoverMovieParamBuilder certificationGte(String certification...
    method certificationLte (line 54) | public DiscoverMovieParamBuilder certificationLte(String certification...
    method certificationCountry (line 63) | public DiscoverMovieParamBuilder certificationCountry(String certifica...
    method includeVideo (line 72) | public DiscoverMovieParamBuilder includeVideo(boolean includeVideo) {
    method primaryReleaseYear (line 77) | public DiscoverMovieParamBuilder primaryReleaseYear(int primaryRelease...
    method primaryReleaseDateGte (line 82) | public DiscoverMovieParamBuilder primaryReleaseDateGte(String primaryR...
    method primaryReleaseDateLte (line 91) | public DiscoverMovieParamBuilder primaryReleaseDateLte(String primaryR...
    method region (line 100) | public DiscoverMovieParamBuilder region(String region) {
    method releaseDateGte (line 109) | public DiscoverMovieParamBuilder releaseDateGte(String releaseDateGte) {
    method releaseDateLte (line 118) | public DiscoverMovieParamBuilder releaseDateLte(String releaseDateLte) {
    method sortBy (line 127) | public DiscoverMovieParamBuilder sortBy(DiscoverMovieSortBy sortBy) {
    method withCast (line 132) | public DiscoverMovieParamBuilder withCast(List<Integer> castIds, boole...
    method withCrew (line 142) | public DiscoverMovieParamBuilder withCrew(List<Integer> crewIds, boole...
    method withPeople (line 152) | public DiscoverMovieParamBuilder withPeople(List<Integer> peopleIds, b...
    method withReleaseType (line 162) | public DiscoverMovieParamBuilder withReleaseType(List<Integer> release...
    method year (line 172) | public DiscoverMovieParamBuilder year(int year) {

FILE: src/main/java/info/movito/themoviedbapi/tools/builders/discover/DiscoverParamBuilder.java
  class DiscoverParamBuilder (line 25) | public abstract class DiscoverParamBuilder<T extends DiscoverParamBuilde...
    method me (line 53) | protected abstract T me();
    method getParameterMap (line 55) | @Override
    method page (line 60) | public T page(int page) {
    method language (line 69) | public T language(String language) {
    method includeAdult (line 78) | public T includeAdult(boolean includeAdult) {
    method withOriginalLanguage (line 83) | public T withOriginalLanguage(String withOriginalLanguage) {
    method voteAverageGte (line 92) | public T voteAverageGte(double voteAverageGte) {
    method voteAverageLte (line 101) | public T voteAverageLte(double voteAverageLte) {
    method voteCountGte (line 110) | public T voteCountGte(double voteCountGte) {
    method voteCountLte (line 119) | public T voteCountLte(double voteCountLte) {
    method withWatchMonetizationTypes (line 128) | public T withWatchMonetizationTypes(List<String> withWatchMonetization...
    method watchRegion (line 138) | public T watchRegion(String watchRegion) {
    method withoutCompanies (line 147) | public T withoutCompanies(List<Integer> companies) {
    method withoutGenres (line 157) | public T withoutGenres(List<Integer> genres) {
    method withoutKeywords (line 167) | public T withoutKeywords(List<String> keywords) {
    method withoutWatchProviders (line 177) | public T withoutWatchProviders(List<Integer> watchProviders) {
    method withCompanies (line 187) | public T withCompanies(List<Integer> companyIds, boolean orQuery) {
    method withGenres (line 197) | public T withGenres(List<Integer> genreIds, boolean orQuery) {
    method withKeywords (line 207) | public T withKeywords(List<Integer> keywordIds, boolean orQuery) {
    method withOriginCountry (line 217) | public T withOriginCountry(String originCountry) {
    method withRuntimeGte (line 226) | public T withRuntimeGte(int runtimeGte) {
    method withRuntimeLte (line 235) | public T withRuntimeLte(int runtimeLte) {
    method withWatchProviders (line 244) | public T withWatchProviders(List<Integer> watchProviderIds, boolean or...

FILE: src/main/java/info/movito/themoviedbapi/tools/builders/discover/DiscoverTvParamBuilder.java
  class DiscoverTvParamBuilder (line 13) | public class DiscoverTvParamBuilder extends DiscoverParamBuilder<Discove...
    method me (line 26) | @Override
    method airDateGte (line 31) | public DiscoverTvParamBuilder airDateGte(String airDateGte) {
    method airDateLte (line 40) | public DiscoverTvParamBuilder airDateLte(String airDateLte) {
    method firstAirDateYear (line 49) | public DiscoverTvParamBuilder firstAirDateYear(int firstAirDateYear) {
    method firstAirDateGte (line 54) | public DiscoverTvParamBuilder firstAirDateGte(String firstAirDateGte) {
    method firstAirDateLte (line 63) | public DiscoverTvParamBuilder firstAirDateLte(String firstAirDateLte) {
    method includeNullFirstAirDates (line 72) | public DiscoverTvParamBuilder includeNullFirstAirDates(boolean include...
    method screenedTheatrically (line 77) | public DiscoverTvParamBuilder screenedTheatrically(boolean screenedThe...
    method sortBy (line 82) | public DiscoverTvParamBuilder sortBy(DiscoverTvSortBy sortBy) {
    method timezone (line 87) | public DiscoverTvParamBuilder timezone(String timezone) {
    method withNetworks (line 96) | public DiscoverTvParamBuilder withNetworks(int withNetworks) {
    method withStatus (line 105) | public DiscoverTvParamBuilder withStatus(List<Integer> statusIds, bool...
    method withType (line 115) | public DiscoverTvParamBuilder withType(List<Integer> typeIds, boolean ...

FILE: src/main/java/info/movito/themoviedbapi/tools/model/time/ExternalSource.java
  type ExternalSource (line 9) | @AllArgsConstructor

FILE: src/main/java/info/movito/themoviedbapi/tools/model/time/TimeWindow.java
  type TimeWindow (line 9) | @AllArgsConstructor

FILE: src/main/java/info/movito/themoviedbapi/tools/sortby/AccountSortBy.java
  type AccountSortBy (line 6) | public enum AccountSortBy implements SortBy {
    method AccountSortBy (line 12) | AccountSortBy(String value) {
    method getValue (line 16) | @Override

FILE: src/main/java/info/movito/themoviedbapi/tools/sortby/DiscoverMovieSortBy.java
  type DiscoverMovieSortBy (line 6) | public enum DiscoverMovieSortBy implements SortBy {
    method DiscoverMovieSortBy (line 24) | DiscoverMovieSortBy(String value) {
    method getValue (line 28) | @Override

FILE: src/main/java/info/movito/themoviedbapi/tools/sortby/DiscoverTvSortBy.java
  type DiscoverTvSortBy (line 6) | public enum DiscoverTvSortBy implements SortBy {
    method DiscoverTvSortBy (line 22) | DiscoverTvSortBy(String value) {
    method getValue (line 26) | @Override

FILE: src/main/java/info/movito/themoviedbapi/tools/sortby/SortBy.java
  type SortBy (line 7) | public interface SortBy {
    method getValue (line 13) | String getValue();

FILE: src/main/java/info/movito/themoviedbapi/util/JsonUtil.java
  class JsonUtil (line 16) | public final class JsonUtil {
    method JsonUtil (line 24) | private JsonUtil() {
    method toJson (line 33) | public static String toJson(Map<String, ?> map) {

FILE: src/main/java/info/movito/themoviedbapi/util/ModelUtil.java
  class ModelUtil (line 12) | public final class ModelUtil {
    method ModelUtil (line 13) | private ModelUtil() {
    method getNames (line 23) | public static List<String> getNames(Collection<? extends NamedIdElemen...
    method getNamesString (line 34) | public static List<String> getNamesString(Collection<? extends NamedSt...

FILE: src/test/java/info/movito/themoviedbapi/AbstractTmdbApiTest.java
  class AbstractTmdbApiTest (line 14) | @Getter
    method setUp (line 25) | @BeforeEach
    method createApiToTest (line 37) | public abstract T createApiToTest();

FILE: src/test/java/info/movito/themoviedbapi/TmdbAccountTest.java
  class TmdbAccountTest (line 33) | public class TmdbAccountTest extends AbstractTmdbApiTest<TmdbAccount> {
    method createApiToTest (line 34) | @Override
    method testGetAccount (line 42) | @Test
    method testAddFavourite (line 56) | @Test
    method testRemoveFavorite (line 82) | @Test
    method testAddToWatchList (line 108) | @Test
    method testRemoveFromWatchList (line 134) | @Test
    method testGetFavouriteMovies (line 160) | @Test
    method testGetFavouriteTv (line 185) | @Test
    method testGetLists (line 206) | @Test
    method testGetRatedMovies (line 224) | @Test
    method testGetRatedTvSeries (line 249) | @Test
    method testGetRatedTvEpisodes (line 270) | @Test
    method testGetWatchListMovies (line 292) | @Test
    method testGetWatchListTvSeries (line 317) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbAuthenticationTest.java
  class TmdbAuthenticationTest (line 31) | public class TmdbAuthenticationTest extends AbstractTmdbApiTest<TmdbAuth...
    method createApiToTest (line 32) | @Override
    method testCreateGuestSession (line 40) | @Test
    method testCreateRequestToken (line 54) | @Test
    method testGetTmdbAuthenticationUrlForRequestToken (line 68) | @Test
    method testGetTmdbAuthenticationUrlForRequestTokenUnccessfulRequestToken (line 83) | @Test
    method testCreateSession (line 99) | @Test
    method testCreateSessionUnsuccessfulRequestToken (line 122) | @Test
    method testCreateAuthenticatedRequestToken (line 132) | @Test
    method testCreateSessionWithLoginUnsuccessfulRequestToken (line 157) | @Test
    method testDeleteSession (line 168) | @Test
    method testDeleteSessionNullSession (line 188) | @Test
    method testValidateKey (line 196) | @Test
    method testValidateKeyUnsuccessful (line 212) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbCertificationsTest.java
  class TmdbCertificationsTest (line 21) | public class TmdbCertificationsTest extends AbstractTmdbApiTest<TmdbCert...
    method createApiToTest (line 22) | @Override
    method testGetMovieCertifications (line 30) | @Test
    method testGetTvCertifications (line 44) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbChangesTest.java
  class TmdbChangesTest (line 22) | public class TmdbChangesTest extends AbstractTmdbApiTest<TmdbChanges> {
    method createApiToTest (line 23) | @Override
    method testGetMovieChangesList (line 31) | @Test
    method testGetPeopleChangesList (line 50) | @Test
    method testGetTvChangesList (line 69) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbCollectionsTest.java
  class TmdbCollectionsTest (line 23) | public class TmdbCollectionsTest extends AbstractTmdbApiTest<TmdbCollect...
    method createApiToTest (line 24) | @Override
    method testGetDetails (line 32) | @Test
    method testGetImages (line 51) | @Test
    method testGetImagesMultipleLanguages (line 70) | @Test
    method testGetTranslations (line 88) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbCompaniesTest.java
  class TmdbCompaniesTest (line 21) | public class TmdbCompaniesTest extends AbstractTmdbApiTest<TmdbCompanies> {
    method createApiToTest (line 22) | @Override
    method testGetDetails (line 30) | @Test
    method testGetAlternativeNames (line 46) | @Test
    method testGetImages (line 62) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbConfigurationTest.java
  class TmdbConfigurationTest (line 25) | public class TmdbConfigurationTest extends AbstractTmdbApiTest<TmdbConfi...
    method createApiToTest (line 26) | @Override
    method testGetDetails (line 34) | @Test
    method testGetCountries (line 48) | @Test
    method testGetJobs (line 66) | @Test
    method testGetLanguages (line 84) | @Test
    method testGetPrimaryTranslations (line 102) | @Test
    method testGetTimezones (line 119) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbDiscoverTest.java
  class TmdbDiscoverTest (line 26) | public class TmdbDiscoverTest extends AbstractTmdbApiTest<TmdbDiscover> {
    method createApiToTest (line 27) | @Override
    method testGetMovie (line 35) | @Test
    method testGetMovieNullBuilder (line 56) | @Test
    method testGetTv (line 74) | @Test
    method testGetTvNullBuilder (line 91) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbFindTest.java
  class TmdbFindTest (line 22) | public class TmdbFindTest extends AbstractTmdbApiTest<TmdbFind> {
    method createApiToTest (line 23) | @Override
    method testFindByIdMovieResults (line 31) | @Test
    method testFindByIdPersonResults (line 56) | @Test
    method testFindByIdTvResults (line 80) | @Test
    method testFindByIdTvSeasonResults (line 104) | @Test
    method testFindByIdTvEpisodeResults (line 128) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbGenresTest.java
  class TmdbGenresTest (line 21) | public class TmdbGenresTest extends AbstractTmdbApiTest<TmdbGenre> {
    method createApiToTest (line 22) | @Override
    method testGetMovieList (line 30) | @Test
    method testGetTvList (line 48) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbGuestSessionsTest.java
  class TmdbGuestSessionsTest (line 24) | public class TmdbGuestSessionsTest extends AbstractTmdbApiTest<TmdbGuest...
    method createApiToTest (line 25) | @Override
    method testGetRatedMovies (line 33) | @Test
    method testGetRatedTvSeries (line 51) | @Test
    method testGetRatedTvEpisodes (line 65) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbKeywordsTest.java
  class TmdbKeywordsTest (line 19) | public class TmdbKeywordsTest extends AbstractTmdbApiTest<TmdbKeywords> {
    method createApiToTest (line 20) | @Override
    method testGetDetails (line 28) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbListsTest.java
  class TmdbListsTest (line 28) | public class TmdbListsTest extends AbstractTmdbApiTest<TmdbLists> {
    method createApiToTest (line 29) | @Override
    method testAddMovie (line 37) | @Test
    method testCheckItemStatus (line 57) | @Test
    method testClear (line 71) | @Test
    method testCreate (line 86) | @Test
    method testDelete (line 107) | @Test
    method testGetDetails (line 122) | @Test
    method testRemoveMovie (line 140) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbMovieListsTest.java
  class TmdbMovieListsTest (line 22) | public class TmdbMovieListsTest extends AbstractTmdbApiTest<TmdbMovieLis...
    method createApiToTest (line 23) | @Override
    method testGetNowPlaying (line 31) | @Test
    method testGetPopular (line 51) | @Test
    method testGetTopRated (line 69) | @Test
    method testGetUpcoming (line 87) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbMoviesTest.java
  class TmdbMoviesTest (line 41) | public class TmdbMoviesTest extends AbstractTmdbApiTest<TmdbMovies> {
    method createApiToTest (line 42) | @Override
    method testGetDetails (line 50) | @Test
    method testGetDetailsWithAppendToResponse (line 84) | @Test
    method testGetAccountStates (line 108) | @Test
    method testGetAlternativeTitles (line 122) | @Test
    method testGetChanges (line 136) | @Test
    method testGetCredits (line 150) | @Test
    method testGetExternalIds (line 164) | @Test
    method testGetImages (line 178) | @Test
    method testGetKeywords (line 192) | @Test
    method testGetLatest (line 206) | @Test
    method testGetLists (line 244) | @Test
    method testGetRecommendations (line 258) | @Test
    method testGetReleaseDates (line 279) | @Test
    method testGetReviews (line 293) | @Test
    method testGetSimilar (line 307) | @Test
    method testGetTranslations (line 328) | @Test
    method testGetVideos (line 342) | @Test
    method testGetWatchProviders (line 356) | @Test
    method testAddRating (line 371) | @Test
    method testDeleteRating (line 390) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbNetworksTest.java
  class TmdbNetworksTest (line 21) | public class TmdbNetworksTest extends AbstractTmdbApiTest<TmdbNetworks> {
    method createApiToTest (line 22) | @Override
    method testGetMovieChangesList (line 30) | @Test
    method testGetAlternativeNames (line 44) | @Test
    method testGetImages (line 58) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbPeopleListsTest.java
  class TmdbPeopleListsTest (line 19) | public class TmdbPeopleListsTest extends AbstractTmdbApiTest<TmdbPeopleL...
    method createApiToTest (line 20) | @Override
    method testGetPopular (line 28) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbPeopleTest.java
  class TmdbPeopleTest (line 38) | public class TmdbPeopleTest extends AbstractTmdbApiTest<TmdbPeople> {
    method createApiToTest (line 39) | @Override
    method testGetDetails (line 47) | @Test
    method testGetDetailsWithAppendToResponse (line 74) | @Test
    method testGetChanges (line 89) | @Test
    method testGetCombinedCredits (line 108) | @Test
    method testExternalIds (line 143) | @Test
    method testGetImages (line 157) | @Test
    method testGetLatest (line 171) | @Test
    method testGetMovieCredits (line 198) | @Test
    method testGetTvCredits (line 231) | @Test
    method testGetTranslations (line 264) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbReviewsTest.java
  class TmdbReviewsTest (line 19) | public class TmdbReviewsTest extends AbstractTmdbApiTest<TmdbReviews> {
    method createApiToTest (line 20) | @Override
    method testGetDetails (line 28) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbTrendingTest.java
  class TmdbTrendingTest (line 25) | public class TmdbTrendingTest extends AbstractTmdbApiTest<TmdbTrending> {
    method createApiToTest (line 26) | @Override
    method testGetAll (line 34) | @Test
    method testGetMovies (line 54) | @Test
    method testGetPeople (line 72) | @Test
    method testGetTv (line 86) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbTvEpisodeGroupsTest.java
  class TmdbTvEpisodeGroupsTest (line 21) | public class TmdbTvEpisodeGroupsTest extends AbstractTmdbApiTest<TmdbTvE...
    method createApiToTest (line 22) | @Override
    method testGetDetails (line 30) | @Test
    method testEpisodeGroupType (line 44) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbTvEpisodesTest.java
  class TmdbTvEpisodesTest (line 36) | public class TmdbTvEpisodesTest extends AbstractTmdbApiTest<TmdbTvEpisod...
    method createApiToTest (line 37) | @Override
    method testGetDetails (line 45) | @Test
    method testGetDetailsWithAppendToResponse (line 72) | @Test
    method testGetAccountStates (line 88) | @Test
    method testGetChanges (line 103) | @Test
    method testGetCredits (line 117) | @Test
    method testGetExternalIds (line 132) | @Test
    method testGetImages (line 147) | @Test
    method testGetTranslations (line 162) | @Test
    method testGetVideos (line 177) | @Test
    method testAddRating (line 192) | @Test
    method testDeleteRating (line 212) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbTvSearchTest.java
  class TmdbTvSearchTest (line 31) | public class TmdbTvSearchTest extends AbstractTmdbApiTest<TmdbSearch> {
    method createApiToTest (line 32) | @Override
    method testSearchCollection (line 40) | @Test
    method testSearchCompany (line 54) | @Test
    method testSearchKeyword (line 68) | @Test
    method testSearchMovie (line 82) | @Test
    method testSearchMulti (line 100) | @Test
    method testSearchPerson (line 138) | @Test
    method testSearchTv (line 152) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbTvSeasonsTest.java
  class TmdbTvSeasonsTest (line 32) | public class TmdbTvSeasonsTest extends AbstractTmdbApiTest<TmdbTvSeasons> {
    method createApiToTest (line 33) | @Override
    method testGetDetails (line 41) | @Test
    method testGetDetailsWithAppendToResponse (line 70) | @Test
    method testGetAccountStates (line 87) | @Test
    method testGetAggregateCredits (line 101) | @Test
    method testGetChanges (line 115) | @Test
    method testGetCredits (line 129) | @Test
    method testGetExternalIds (line 143) | @Test
    method testGetImages (line 157) | @Test
    method testGetTranslations (line 171) | @Test
    method testGetVideos (line 185) | @Test
    method testGetWatchProviders (line 199) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbTvSeriesListsTest.java
  class TmdbTvSeriesListsTest (line 19) | public class TmdbTvSeriesListsTest extends AbstractTmdbApiTest<TmdbTvSer...
    method createApiToTest (line 20) | @Override
    method testGetAiringToday (line 28) | @Test
    method testGetOnTheAir (line 42) | @Test
    method testGetPopular (line 56) | @Test
    method testGetTopRated (line 70) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbTvSeriesTest.java
  class TmdbTvSeriesTest (line 44) | public class TmdbTvSeriesTest extends AbstractTmdbApiTest<TmdbTvSeries> {
    method createApiToTest (line 45) | @Override
    method testGetDetails (line 53) | @Test
    method testGetDetailsWithAppendToResponse (line 90) | @Test
    method testGetAccountStates (line 107) | @Test
    method testGetAggregateCredits (line 121) | @Test
    method testGetAlternativeTitles (line 135) | @Test
    method testGetChanges (line 149) | @Test
    method testGetContentRatings (line 163) | @Test
    method testGetCredits (line 177) | @Test
    method testGetEpisodeGroups (line 191) | @Test
    method testGetExternalIds (line 205) | @Test
    method testGetImages (line 219) | @Test
    method testGetKeywords (line 233) | @Test
    method testGetLatest (line 247) | @Test
    method testGetLists (line 284) | @Test
    method testGetRecommendations (line 298) | @Test
    method testGetReviews (line 312) | @Test
    method testGetScreenedTheatrically (line 326) | @Test
    method testGetSimilar (line 340) | @Test
    method testGetTranslations (line 354) | @Test
    method testGetVideos (line 368) | @Test
    method testGetWatchProviders (line 382) | @Test
    method testAddRating (line 397) | @Test
    method testDeleteRating (line 416) | @Test

FILE: src/test/java/info/movito/themoviedbapi/TmdbWatchProvidersTest.java
  class TmdbWatchProvidersTest (line 26) | public class TmdbWatchProvidersTest extends AbstractTmdbApiTest<TmdbWatc...
    method createApiToTest (line 27) | @Override
    method testGetAvailableRegions (line 35) | @Test
    method testGetMovieProviders (line 49) | @Test
    method testGetTvProviders (line 71) | @Test
    method testEmptyWatchProviders (line 93) | @Test

FILE: src/test/java/info/movito/themoviedbapi/testutil/AbstractJsonMappingValidator.java
  class AbstractJsonMappingValidator (line 17) | public class AbstractJsonMappingValidator {
    method AbstractJsonMappingValidator (line 32) | public AbstractJsonMappingValidator(AbstractJsonMapping objectToCheck) {
    method AbstractJsonMappingValidator (line 42) | public AbstractJsonMappingValidator(AbstractJsonMapping objectToCheck,...
    method validateAll (line 57) | public void validateAll() {
    method validateFields (line 66) | private void validateFields(List<String> fieldsToValidate, List<String...
    method validateNullFields (line 73) | private void validateNullFields() {
    method validateEmptyCollections (line 81) | private void validateEmptyCollections() {
    method validateNullContainingCollections (line 89) | private void validateNullContainingCollections() {
    method validateEmptyMaps (line 97) | private void validateEmptyMaps() {
    method validateNullContainingMaps (line 105) | private void validateNullContainingMaps() {
    method validateNewItems (line 113) | private void validateNewItems() {
    method processFields (line 120) | private void processFields(AbstractJsonMapping objectToCheck, String f...

FILE: src/test/java/info/movito/themoviedbapi/testutil/TestUtils.java
  class TestUtils (line 13) | public final class TestUtils {
    method TestUtils (line 14) | private TestUtils() {
    method readTestFile (line 24) | public static String readTestFile(String fileName) throws IOException {
    method validateAbstractJsonMappingFields (line 37) | public static void validateAbstractJsonMappingFields(AbstractJsonMappi...
    method validateAbstractJsonMappingFields (line 44) | public static void validateAbstractJsonMappingFields(AbstractJsonMappi...

FILE: src/test/java/info/movito/themoviedbapi/testutil/ValidatorConfig.java
  class ValidatorConfig (line 11) | @Builder

FILE: src/test/java/info/movito/themoviedbapi/util/JsonUtilTest.java
  class JsonUtilTest (line 19) | public class JsonUtilTest {
    method testToJson (line 23) | @Test
    method testToJson_unknownProperties (line 36) | @Test
    method testToJson_nullListPropertyDeserialisedAsEmpty (line 54) | @Test
    class JsonTestClass (line 66) | @Data

FILE: src/test/java/info/movito/themoviedbapi/util/ModelUtilTest.java
  class ModelUtilTest (line 16) | public class ModelUtilTest {
    method testGetNames (line 20) | @Test
    method testGetNamesString (line 40) | @Test
Condensed preview — 452 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,812K chars).
[
  {
    "path": ".gitattributes",
    "chars": 483,
    "preview": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs     diff=csharp\n*.sln"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 389,
    "preview": "---\nname: Bug report\nabout: Create a report to help us fix an issue\ntitle: \"[BUG]\"\nlabels: bug\nassignees: ''\n\n---\n\n**Des"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 590,
    "preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
  },
  {
    "path": ".github/workflows/gradle.yml",
    "chars": 526,
    "preview": "name: build\n\non:\n  push:\n    branches: [ master ]\n  pull_request:\n    branches: [ master ]\n\npermissions:\n  contents: rea"
  },
  {
    "path": ".gitignore",
    "chars": 219,
    "preview": "*.class\n\n# Package Files #\n*.jar\n*.war\n*.ear\n\n/target/\n/nbactions.xml\n\n.classpath\n.project\n.idea/\n.settings/\n*.iml\n/bin/"
  },
  {
    "path": "LICENCE.txt",
    "chars": 1529,
    "preview": "Copyright (c) 2026, Holger Brandl, Conor Egan\nAll rights reserved.\n\nRedistribution and use in source and binary forms, w"
  },
  {
    "path": "README.md",
    "chars": 5189,
    "preview": "# TheMovieDB API\n[![Download](https://img.shields.io/github/v/release/c-eg/themoviedbapi)](https://github.com/c-eg/themo"
  },
  {
    "path": "build.gradle.kts",
    "chars": 4332,
    "preview": "plugins {\n    `java-library`\n    checkstyle\n    `maven-publish`\n    signing\n    id(\"io.github.gradle-nexus.publish-plugi"
  },
  {
    "path": "config/checkstyle/checkstyle.xml",
    "chars": 13758,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE module PUBLIC\n        \"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN\"\n        \"htt"
  },
  {
    "path": "config/checkstyle/suppressions.xml",
    "chars": 953,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE suppressions PUBLIC\n        \"-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN\""
  },
  {
    "path": "devel_notes.md",
    "chars": 1574,
    "preview": "# Developer Notes\n## How to do a release?\n\n1. Make sure to increase version number in [build.gradle.kts](build.gradle.kt"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "chars": 252,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
  },
  {
    "path": "gradle.properties",
    "chars": 54,
    "preview": "org.gradle.caching = true\norg.gradle.vfs.watch = true\n"
  },
  {
    "path": "gradlew",
    "chars": 8710,
    "preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "gradlew.bat",
    "chars": 2843,
    "preview": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \""
  },
  {
    "path": "lombok.config",
    "chars": 71,
    "preview": "config.stopBubbling = true\n\nlombok.addLombokGeneratedAnnotation = true\n"
  },
  {
    "path": "settings.gradle.kts",
    "chars": 36,
    "preview": "rootProject.name = \"themoviedbapi\"\n\n"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/AbstractTmdbApi.java",
    "chars": 6435,
    "preview": "package info.movito.themoviedbapi;\n\nimport com.fasterxml.jackson.core.JsonProcessingException;\nimport com.fasterxml.jack"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbAccount.java",
    "chars": 16674,
    "preview": "package info.movito.themoviedbapi;\n\nimport java.util.HashMap;\n\nimport info.movito.themoviedbapi.model.account.Account;\ni"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbApi.java",
    "chars": 3349,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.tools.TmdbHttpClient;\nimport info.movito.themoviedb"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbAuthentication.java",
    "chars": 7842,
    "preview": "package info.movito.themoviedbapi;\n\nimport java.util.HashMap;\n\nimport info.movito.themoviedbapi.model.authentication.Gue"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbCertifications.java",
    "chars": 2027,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.certifications.CertificationResults;\nimport i"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbChanges.java",
    "chars": 5158,
    "preview": "package info.movito.themoviedbapi;\n\nimport java.time.LocalDate;\nimport java.time.format.DateTimeFormatter;\nimport java.t"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbCollections.java",
    "chars": 3278,
    "preview": "package info.movito.themoviedbapi;\n\nimport java.util.List;\n\nimport info.movito.themoviedbapi.model.collections.Collectio"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbCompanies.java",
    "chars": 2591,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.companies.AlternativeNamesResultsPage;\nimport"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbConfiguration.java",
    "chars": 4605,
    "preview": "package info.movito.themoviedbapi;\n\nimport java.util.List;\n\nimport com.fasterxml.jackson.core.type.TypeReference;\nimport"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbDiscover.java",
    "chars": 2217,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.core.MovieResultsPage;\nimport info.movito.the"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbFind.java",
    "chars": 1491,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.find.FindResults;\nimport info.movito.themovie"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbGenre.java",
    "chars": 2091,
    "preview": "package info.movito.themoviedbapi;\n\nimport java.util.List;\n\nimport info.movito.themoviedbapi.model.core.Genre;\nimport in"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbGuestSessions.java",
    "chars": 4335,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.rated.RatedMovieResultsPage;\nimport info.movi"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbKeywords.java",
    "chars": 1830,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.core.MovieDbResultsPage;\nimport info.movito.t"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbLists.java",
    "chars": 7054,
    "preview": "package info.movito.themoviedbapi;\n\nimport java.util.HashMap;\n\nimport info.movito.themoviedbapi.model.core.responses.Res"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbMovieLists.java",
    "chars": 4670,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.core.MovieResultsPage;\nimport info.movito.the"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbMovies.java",
    "chars": 17606,
    "preview": "package info.movito.themoviedbapi;\n\nimport java.util.HashMap;\n\nimport info.movito.themoviedbapi.model.core.AccountStates"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbNetworks.java",
    "chars": 2583,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.core.image.ImageResults;\nimport info.movito.t"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbPeople.java",
    "chars": 7759,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.movies.changes.ChangeResults;\nimport info.mov"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbPeopleLists.java",
    "chars": 1403,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.core.popularperson.PopularPersonResultsPage;\n"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbReviews.java",
    "chars": 1098,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.reviews.Review;\nimport info.movito.themoviedb"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbSearch.java",
    "chars": 9848,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.core.MovieResultsPage;\nimport info.movito.the"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbTrending.java",
    "chars": 7075,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.core.MovieResultsPage;\nimport info.movito.the"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbTvEpisodeGroups.java",
    "chars": 1375,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.tv.episodegroups.TvEpisodeGroups;\nimport info"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbTvEpisodes.java",
    "chars": 13082,
    "preview": "package info.movito.themoviedbapi;\n\nimport java.util.HashMap;\n\nimport info.movito.themoviedbapi.model.core.AccountStates"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbTvSeasons.java",
    "chars": 11001,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.core.video.VideoResults;\nimport info.movito.t"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbTvSeries.java",
    "chars": 20473,
    "preview": "package info.movito.themoviedbapi;\n\nimport java.util.HashMap;\n\nimport info.movito.themoviedbapi.model.core.AccountStates"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbTvSeriesLists.java",
    "chars": 4298,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.core.TvSeriesResultsPage;\nimport info.movito."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/TmdbWatchProviders.java",
    "chars": 3065,
    "preview": "package info.movito.themoviedbapi;\n\nimport info.movito.themoviedbapi.model.watchproviders.AvailableRegionResults;\nimport"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/account/Account.java",
    "chars": 616,
    "preview": "package info.movito.themoviedbapi.model.account;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movi"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/account/Avatar.java",
    "chars": 710,
    "preview": "package info.movito.themoviedbapi.model.account;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport com.fasterxml."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/authentication/GuestSession.java",
    "chars": 527,
    "preview": "package info.movito.themoviedbapi.model.authentication;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport in"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/authentication/RequestToken.java",
    "chars": 520,
    "preview": "package info.movito.themoviedbapi.model.authentication;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport in"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/authentication/Session.java",
    "chars": 448,
    "preview": "package info.movito.themoviedbapi.model.authentication;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport in"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/certifications/Certification.java",
    "chars": 515,
    "preview": "package info.movito.themoviedbapi.model.certifications;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport in"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/certifications/CertificationResults.java",
    "chars": 527,
    "preview": "package info.movito.themoviedbapi.model.certifications;\n\nimport java.util.HashMap;\nimport java.util.List;\nimport java.ut"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/changes/Change.java",
    "chars": 352,
    "preview": "package info.movito.themoviedbapi.model.changes;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movi"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/changes/ChangesResultsPage.java",
    "chars": 172,
    "preview": "package info.movito.themoviedbapi.model.changes;\n\nimport info.movito.themoviedbapi.model.core.ResultsPage;\n\npublic class"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/collections/CollectionInfo.java",
    "chars": 643,
    "preview": "package info.movito.themoviedbapi.model.collections;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fas"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/collections/Data.java",
    "chars": 481,
    "preview": "package info.movito.themoviedbapi.model.collections;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/collections/Images.java",
    "chars": 586,
    "preview": "package info.movito.themoviedbapi.model.collections;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fas"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/collections/Part.java",
    "chars": 1270,
    "preview": "package info.movito.themoviedbapi.model.collections;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fas"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/collections/Translation.java",
    "chars": 605,
    "preview": "package info.movito.themoviedbapi.model.collections;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/collections/Translations.java",
    "chars": 458,
    "preview": "package info.movito.themoviedbapi.model.collections;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fas"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/companies/AlternativeNamesResultsPage.java",
    "chars": 245,
    "preview": "package info.movito.themoviedbapi.model.companies;\n\nimport info.movito.themoviedbapi.model.core.AlternativeName;\nimport "
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/companies/Company.java",
    "chars": 711,
    "preview": "package info.movito.themoviedbapi.model.companies;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.mo"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/configuration/Configuration.java",
    "chars": 540,
    "preview": "package info.movito.themoviedbapi.model.configuration;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.f"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/configuration/Country.java",
    "chars": 519,
    "preview": "package info.movito.themoviedbapi.model.configuration;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport inf"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/configuration/ImageConfig.java",
    "chars": 977,
    "preview": "package info.movito.themoviedbapi.model.configuration;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.f"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/configuration/Job.java",
    "chars": 515,
    "preview": "package info.movito.themoviedbapi.model.configuration;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.f"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/configuration/Timezone.java",
    "chars": 520,
    "preview": "package info.movito.themoviedbapi.model.configuration;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.f"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/AbstractJsonMapping.java",
    "chars": 876,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport java.io.Serial;\nimport java.io.Serializable;\nimport java.util.Hash"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/AccountStates.java",
    "chars": 424,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Data;"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/AlternativeName.java",
    "chars": 363,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Data;"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/AlternativeTitle.java",
    "chars": 428,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Data;"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/Genre.java",
    "chars": 172,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport com.fasterxml.jackson.annotation.JsonRootName;\n\n@JsonRootName(\"gen"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/Genres.java",
    "chars": 383,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxml."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/IdElement.java",
    "chars": 383,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Data;"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/Language.java",
    "chars": 431,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Data;"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/Movie.java",
    "chars": 1351,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxml."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/MovieDbResultsPage.java",
    "chars": 169,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport info.movito.themoviedbapi.model.movies.MovieDb;\n\npublic class Movi"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/MovieResultsPage.java",
    "chars": 109,
    "preview": "package info.movito.themoviedbapi.model.core;\n\npublic class MovieResultsPage extends ResultsPage<Movie> {\n\n}\n"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/NamedElement.java",
    "chars": 308,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Data;"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/NamedIdElement.java",
    "chars": 299,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Data;"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/NamedStringIdElement.java",
    "chars": 311,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Data;"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/ProductionCompany.java",
    "chars": 477,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport com.fasterxm"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/ProductionCountry.java",
    "chars": 464,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport com.fasterxm"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/Results.java",
    "chars": 525,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport java.util.ArrayList;\nimport java.util.Iterator;\nimport java.util.L"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/ResultsPage.java",
    "chars": 446,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Data;"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/Review.java",
    "chars": 675,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movito."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/ReviewResultsPage.java",
    "chars": 110,
    "preview": "package info.movito.themoviedbapi.model.core;\n\npublic class ReviewResultsPage extends ResultsPage<Review> {\n}\n"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/StringIdElement.java",
    "chars": 392,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Data;"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/TvKeywords.java",
    "chars": 254,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport info.movito.themoviedbapi.model.keywords.Keyword;\nimport lombok.Da"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/TvSeries.java",
    "chars": 1298,
    "preview": "package info.movito.themoviedbapi.model.core;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxml."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/TvSeriesResultsPage.java",
    "chars": 115,
    "preview": "package info.movito.themoviedbapi.model.core;\n\npublic class TvSeriesResultsPage extends ResultsPage<TvSeries> {\n\n}\n"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/image/Artwork.java",
    "chars": 753,
    "preview": "package info.movito.themoviedbapi.model.core.image;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.m"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/image/Image.java",
    "chars": 743,
    "preview": "package info.movito.themoviedbapi.model.core.image;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.m"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/image/ImageResults.java",
    "chars": 437,
    "preview": "package info.movito.themoviedbapi.model.core.image;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fast"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/multi/Multi.java",
    "chars": 1058,
    "preview": "package info.movito.themoviedbapi.model.core.multi;\n\nimport com.fasterxml.jackson.annotation.JsonSubTypes;\nimport com.fa"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/multi/MultiMovie.java",
    "chars": 350,
    "preview": "package info.movito.themoviedbapi.model.core.multi;\n\nimport info.movito.themoviedbapi.model.core.Movie;\nimport lombok.Da"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/multi/MultiPerson.java",
    "chars": 382,
    "preview": "package info.movito.themoviedbapi.model.core.multi;\n\nimport info.movito.themoviedbapi.model.core.popularperson.PopularPe"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/multi/MultiResultsPage.java",
    "chars": 172,
    "preview": "package info.movito.themoviedbapi.model.core.multi;\n\nimport info.movito.themoviedbapi.model.core.ResultsPage;\n\npublic cl"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/multi/MultiTvSeries.java",
    "chars": 363,
    "preview": "package info.movito.themoviedbapi.model.core.multi;\n\nimport info.movito.themoviedbapi.model.core.TvSeries;\nimport lombok"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/popularperson/KnownFor.java",
    "chars": 1281,
    "preview": "package info.movito.themoviedbapi.model.core.popularperson;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport "
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/popularperson/PopularPerson.java",
    "chars": 968,
    "preview": "package info.movito.themoviedbapi.model.core.popularperson;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport "
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/popularperson/PopularPersonResultsPage.java",
    "chars": 196,
    "preview": "package info.movito.themoviedbapi.model.core.popularperson;\n\nimport info.movito.themoviedbapi.model.core.ResultsPage;\n\np"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/responses/ResponseStatus.java",
    "chars": 536,
    "preview": "package info.movito.themoviedbapi.model.core.responses;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport in"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/responses/ResponseStatusAuthentication.java",
    "chars": 335,
    "preview": "package info.movito.themoviedbapi.model.core.responses;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lo"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/responses/ResponseStatusDelete.java",
    "chars": 398,
    "preview": "package info.movito.themoviedbapi.model.core.responses;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport in"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/responses/TmdbResponseException.java",
    "chars": 737,
    "preview": "package info.movito.themoviedbapi.model.core.responses;\n\nimport info.movito.themoviedbapi.tools.TmdbException;\nimport in"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/video/Video.java",
    "chars": 855,
    "preview": "package info.movito.themoviedbapi.model.core.video;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport com.fa"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/video/VideoResults.java",
    "chars": 160,
    "preview": "package info.movito.themoviedbapi.model.core.video;\n\nimport info.movito.themoviedbapi.model.core.Results;\n\npublic class "
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/watchproviders/Provider.java",
    "chars": 604,
    "preview": "package info.movito.themoviedbapi.model.core.watchproviders;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimpo"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/watchproviders/ProviderResults.java",
    "chars": 464,
    "preview": "package info.movito.themoviedbapi.model.core.watchproviders;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport co"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/core/watchproviders/WatchProviders.java",
    "chars": 891,
    "preview": "package info.movito.themoviedbapi.model.core.watchproviders;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/find/FindMovie.java",
    "chars": 236,
    "preview": "package info.movito.themoviedbapi.model.find;\n\nimport info.movito.themoviedbapi.model.core.Movie;\nimport lombok.Data;\nim"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/find/FindPerson.java",
    "chars": 267,
    "preview": "package info.movito.themoviedbapi.model.find;\n\nimport info.movito.themoviedbapi.model.core.popularperson.PopularPerson;\n"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/find/FindResults.java",
    "chars": 891,
    "preview": "package info.movito.themoviedbapi.model.find;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxml."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/find/FindTvEpisode.java",
    "chars": 371,
    "preview": "package info.movito.themoviedbapi.model.find;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movito."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/find/FindTvSeason.java",
    "chars": 359,
    "preview": "package info.movito.themoviedbapi.model.find;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movito."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/find/FindTvSeries.java",
    "chars": 245,
    "preview": "package info.movito.themoviedbapi.model.find;\n\nimport info.movito.themoviedbapi.model.core.TvSeries;\nimport lombok.Data;"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/keywords/Keyword.java",
    "chars": 240,
    "preview": "package info.movito.themoviedbapi.model.keywords;\n\nimport com.fasterxml.jackson.annotation.JsonRootName;\nimport info.mov"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/lists/ListDetails.java",
    "chars": 882,
    "preview": "package info.movito.themoviedbapi.model.lists;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxml"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/lists/ListItemStatus.java",
    "chars": 404,
    "preview": "package info.movito.themoviedbapi.model.lists;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movito"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/lists/MovieListCreationStatus.java",
    "chars": 417,
    "preview": "package info.movito.themoviedbapi.model.lists;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movito"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movielists/Dates.java",
    "chars": 436,
    "preview": "package info.movito.themoviedbapi.model.movielists;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.m"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movielists/MovieResultsPageWithDates.java",
    "chars": 434,
    "preview": "package info.movito.themoviedbapi.model.movielists;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.m"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/AlternativeTitles.java",
    "chars": 513,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxm"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/BelongsToCollection.java",
    "chars": 453,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movit"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/Cast.java",
    "chars": 1029,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movit"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/Credits.java",
    "chars": 501,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxm"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/Crew.java",
    "chars": 926,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movit"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/Data.java",
    "chars": 593,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movit"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/ExternalIds.java",
    "chars": 618,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movit"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/Images.java",
    "chars": 662,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxm"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/KeywordResults.java",
    "chars": 500,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxm"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/MovieDb.java",
    "chars": 5105,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxm"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/MovieList.java",
    "chars": 697,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movit"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/MovieListResultsPage.java",
    "chars": 176,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport info.movito.themoviedbapi.model.core.ResultsPage;\n\npublic class "
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/ReleaseDate.java",
    "chars": 772,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxm"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/ReleaseDateResults.java",
    "chars": 168,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport info.movito.themoviedbapi.model.core.Results;\n\npublic class Rele"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/ReleaseInfo.java",
    "chars": 536,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxm"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/ReleaseType.java",
    "chars": 316,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport com.fasterxml.jackson.annotation.JsonValue;\n\npublic enum Release"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/Translation.java",
    "chars": 600,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movit"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/Translations.java",
    "chars": 453,
    "preview": "package info.movito.themoviedbapi.model.movies;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxm"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/changes/Change.java",
    "chars": 517,
    "preview": "package info.movito.themoviedbapi.model.movies.changes;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/changes/ChangeItem.java",
    "chars": 604,
    "preview": "package info.movito.themoviedbapi.model.movies.changes;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport in"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/movies/changes/ChangeResults.java",
    "chars": 473,
    "preview": "package info.movito.themoviedbapi.model.movies.changes;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/networks/AlternativeNamesResults.java",
    "chars": 240,
    "preview": "package info.movito.themoviedbapi.model.networks;\n\nimport info.movito.themoviedbapi.model.core.AlternativeName;\nimport i"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/networks/Network.java",
    "chars": 569,
    "preview": "package info.movito.themoviedbapi.model.networks;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.mov"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/Data.java",
    "chars": 364,
    "preview": "package info.movito.themoviedbapi.model.people;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movit"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/ExternalIds.java",
    "chars": 936,
    "preview": "package info.movito.themoviedbapi.model.people;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movit"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/Gender.java",
    "chars": 256,
    "preview": "package info.movito.themoviedbapi.model.people;\n\nimport com.fasterxml.jackson.annotation.JsonValue;\n\npublic enum Gender "
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/PersonDb.java",
    "chars": 2589,
    "preview": "package info.movito.themoviedbapi.model.people;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxm"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/PersonImages.java",
    "chars": 500,
    "preview": "package info.movito.themoviedbapi.model.people;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxm"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/Translation.java",
    "chars": 600,
    "preview": "package info.movito.themoviedbapi.model.people;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movit"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/Translations.java",
    "chars": 453,
    "preview": "package info.movito.themoviedbapi.model.people;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterxm"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/credits/Cast.java",
    "chars": 526,
    "preview": "package info.movito.themoviedbapi.model.people.credits;\n\nimport com.fasterxml.jackson.annotation.JsonSubTypes;\nimport co"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/credits/CombinedPersonCredits.java",
    "chars": 523,
    "preview": "package info.movito.themoviedbapi.model.people.credits;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/credits/Crew.java",
    "chars": 526,
    "preview": "package info.movito.themoviedbapi.model.people.credits;\n\nimport com.fasterxml.jackson.annotation.JsonSubTypes;\nimport co"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/credits/MediaType.java",
    "chars": 208,
    "preview": "package info.movito.themoviedbapi.model.people.credits;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\n\npublic e"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/credits/MovieCast.java",
    "chars": 1608,
    "preview": "package info.movito.themoviedbapi.model.people.credits;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/credits/MovieCredits.java",
    "chars": 524,
    "preview": "package info.movito.themoviedbapi.model.people.credits;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/credits/MovieCrew.java",
    "chars": 1605,
    "preview": "package info.movito.themoviedbapi.model.people.credits;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/credits/TvCast.java",
    "chars": 1616,
    "preview": "package info.movito.themoviedbapi.model.people.credits;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/credits/TvCredits.java",
    "chars": 515,
    "preview": "package info.movito.themoviedbapi.model.people.credits;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/people/credits/TvCrew.java",
    "chars": 1668,
    "preview": "package info.movito.themoviedbapi.model.people.credits;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com."
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/rated/RatedMovie.java",
    "chars": 347,
    "preview": "package info.movito.themoviedbapi.model.rated;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movito"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/rated/RatedMovieResultsPage.java",
    "chars": 177,
    "preview": "package info.movito.themoviedbapi.model.rated;\n\nimport info.movito.themoviedbapi.model.core.ResultsPage;\n\npublic class R"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/rated/RatedTvEpisode.java",
    "chars": 1014,
    "preview": "package info.movito.themoviedbapi.model.rated;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movito"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/rated/RatedTvEpisodeResultsPage.java",
    "chars": 185,
    "preview": "package info.movito.themoviedbapi.model.rated;\n\nimport info.movito.themoviedbapi.model.core.ResultsPage;\n\npublic class R"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/rated/RatedTvSeries.java",
    "chars": 356,
    "preview": "package info.movito.themoviedbapi.model.rated;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movito"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/rated/RatedTvSeriesResultsPage.java",
    "chars": 183,
    "preview": "package info.movito.themoviedbapi.model.rated;\n\nimport info.movito.themoviedbapi.model.core.ResultsPage;\n\npublic class R"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/reviews/AuthorDetails.java",
    "chars": 491,
    "preview": "package info.movito.themoviedbapi.model.reviews;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movi"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/reviews/Review.java",
    "chars": 925,
    "preview": "package info.movito.themoviedbapi.model.reviews;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movi"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/search/Collection.java",
    "chars": 705,
    "preview": "package info.movito.themoviedbapi.model.search;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movit"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/search/CollectionResultsPage.java",
    "chars": 178,
    "preview": "package info.movito.themoviedbapi.model.search;\n\nimport info.movito.themoviedbapi.model.core.ResultsPage;\n\npublic class "
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/search/Company.java",
    "chars": 439,
    "preview": "package info.movito.themoviedbapi.model.search;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movit"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/search/CompanyResultsPage.java",
    "chars": 172,
    "preview": "package info.movito.themoviedbapi.model.search;\n\nimport info.movito.themoviedbapi.model.core.ResultsPage;\n\npublic class "
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/search/KeywordResultsPage.java",
    "chars": 229,
    "preview": "package info.movito.themoviedbapi.model.search;\n\nimport info.movito.themoviedbapi.model.core.ResultsPage;\nimport info.mo"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/Change.java",
    "chars": 510,
    "preview": "package info.movito.themoviedbapi.model.tv.core;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterx"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/ChangeItem.java",
    "chars": 668,
    "preview": "package info.movito.themoviedbapi.model.tv.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movi"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/ChangeResults.java",
    "chars": 466,
    "preview": "package info.movito.themoviedbapi.model.tv.core;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterx"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/Data.java",
    "chars": 415,
    "preview": "package info.movito.themoviedbapi.model.tv.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movi"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/Network.java",
    "chars": 440,
    "preview": "package info.movito.themoviedbapi.model.tv.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movi"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/Translation.java",
    "chars": 601,
    "preview": "package info.movito.themoviedbapi.model.tv.core;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.movi"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/Translations.java",
    "chars": 454,
    "preview": "package info.movito.themoviedbapi.model.tv.core;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fasterx"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/TvEpisode.java",
    "chars": 1063,
    "preview": "package info.movito.themoviedbapi.model.tv.core;\n\nimport com.fasterxml.jackson.annotation.JsonIgnoreProperties;\nimport c"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/TvSeason.java",
    "chars": 809,
    "preview": "package info.movito.themoviedbapi.model.tv.core;\n\nimport com.fasterxml.jackson.annotation.JsonIgnoreProperties;\nimport c"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/credits/AggregateCast.java",
    "chars": 1090,
    "preview": "package info.movito.themoviedbapi.model.tv.core.credits;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/credits/AggregateCredits.java",
    "chars": 537,
    "preview": "package info.movito.themoviedbapi.model.tv.core.credits;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/credits/AggregateCrew.java",
    "chars": 1095,
    "preview": "package info.movito.themoviedbapi.model.tv.core.credits;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/credits/Cast.java",
    "chars": 938,
    "preview": "package info.movito.themoviedbapi.model.tv.core.credits;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport i"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/credits/Credits.java",
    "chars": 510,
    "preview": "package info.movito.themoviedbapi.model.tv.core.credits;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/core/credits/Crew.java",
    "chars": 935,
    "preview": "package info.movito.themoviedbapi.model.tv.core.credits;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport i"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/episode/EpisodeCredits.java",
    "chars": 461,
    "preview": "package info.movito.themoviedbapi.model.tv.episode;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fast"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/episode/ExternalIds.java",
    "chars": 677,
    "preview": "package info.movito.themoviedbapi.model.tv.episode;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.m"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/episode/GuestStar.java",
    "chars": 938,
    "preview": "package info.movito.themoviedbapi.model.tv.episode;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport info.m"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/episode/Images.java",
    "chars": 494,
    "preview": "package info.movito.themoviedbapi.model.tv.episode;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fast"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/episode/TvEpisodeDb.java",
    "chars": 2264,
    "preview": "package info.movito.themoviedbapi.model.tv.episode;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport com.fast"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/episodegroups/EpisodeGroupType.java",
    "chars": 340,
    "preview": "package info.movito.themoviedbapi.model.tv.episodegroups;\n\nimport com.fasterxml.jackson.annotation.JsonValue;\n\npublic en"
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/episodegroups/OrderedTvEpisode.java",
    "chars": 374,
    "preview": "package info.movito.themoviedbapi.model.tv.episodegroups;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport "
  },
  {
    "path": "src/main/java/info/movito/themoviedbapi/model/tv/episodegroups/TvEpisodeGroup.java",
    "chars": 596,
    "preview": "package info.movito.themoviedbapi.model.tv.episodegroups;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport co"
  }
]

// ... and 252 more files (download for full content)

About this extraction

This page contains the full source code of the holgerbrandl/themoviedbapi GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 452 files (4.2 MB), approximately 1.1M tokens, and a symbol index with 837 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!