This file defines the schema for the TV vertical in the Engage SDK.

    {
      "client": "com.google.android.engage.service.AppEngagePublishClient",
      "clusterTypes": [
        "TYPE_RECOMMENDATION",
        "TYPE_FEATURED",
        "TYPE_CONTINUATION",
        "TYPE_SUBSCRIPTION",
        "TYPE_ENGAGEMENT"
      ],
      "entities": {
        "MovieEntity": {
          "package": "com.google.android.engage.video.datamodel.MovieEntity",
          "fields": {
            "entityId": {
              "type": "String",
              "requirement": "Optional",
              "setter": "setEntityId(String)",
              "getter": "getEntityId()"
            },
            "posterImages": {
              "type": "List<Image>",
              "requirement": "Required",
              "adder": "addPosterImage(Image)",
              "getter": "getPosterImages()",
              "adderAll": "addPosterImages(List<Image>)"
            },
            "name": {
              "type": "String",
              "requirement": "Required",
              "setter": "setName(String)",
              "getter": "getName()"
            },
            "lastEngagementTimeMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setLastEngagementTimeMillis(long)",
              "getter": "getLastEngagementTimeMillis()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "watchNextType": {
              "type": "@WatchNextType int",
              "requirement": "Optional",
              "setter": "setWatchNextType(@WatchNextType int)",
              "getter": "getWatchNextType()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "lastPlayBackPositionTimeMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setLastPlayBackPositionTimeMillis(long)",
              "getter": "getLastPlayBackPositionTimeMillis()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "availabilityTimeWindows": {
              "type": "List<DisplayTimeWindow>",
              "requirement": "Optional",
              "adder": "addAvailabilityTimeWindow(DisplayTimeWindow)",
              "getter": "getAvailabilityTimeWindows()"
            },
            "allAvailabilityTimeWindows": {
              "type": "List<List<DisplayTimeWindow>>",
              "requirement": "Optional",
              "adder": "addAllAvailabilityTimeWindows(DisplayTimeWindow)",
              "adderAll": "addAllAvailabilityTimeWindows(List<DisplayTimeWindow>)"
            },
            "playBackUri": {
              "type": "Uri",
              "requirement": "Required",
              "setter": "setPlayBackUri(Uri)",
              "getter": "getPlayBackUri()"
            },
            "infoPageUri": {
              "type": "Uri",
              "requirement": "Optional",
              "setter": "setInfoPageUri(Uri)",
              "getter": "getInfoPageUri()"
            },
            "releaseDateEpochMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setReleaseDateEpochMillis(long)",
              "getter": "getReleaseDateEpochMillis()"
            },
            "availability": {
              "type": "@ContentAvailability int",
              "requirement": "Required",
              "setter": "setAvailability(@ContentAvailability int)",
              "getter": "getAvailability()"
            },
            "durationMillis": {
              "type": "Long",
              "requirement": "Required",
              "setter": "setDurationMillis(long)",
              "getter": "getDurationMillis()"
            },
            "genres": {
              "type": "List<String>",
              "requirement": "Optional",
              "adder": "addGenre(String)",
              "getter": "getGenres()",
              "adderAll": "addGenres(List<String>)"
            },
            "contentRatings": {
              "type": "List<String>",
              "requirement": "Required",
              "adder": "addContentRating(RatingSystem)",
              "getter": "getContentRatings()",
              "adderAll": "addContentRatings(List<RatingSystem>)"
            },
            "downloadedOnDevice": {
              "type": "Boolean",
              "requirement": "Optional",
              "setter": "setDownloadedOnDevice(boolean)",
              "getter": "isDownloadedOnDevice()"
            },
            "price": {
              "type": "Price",
              "requirement": "Optional",
              "setter": "setPrice(Price)",
              "getter": "getPrice()"
            },
            "platformSpecificPlaybackUris": {
              "type": "List<PlatformSpecificUri>",
              "requirement": "Optional",
              "adder": "addPlatformSpecificPlaybackUri(PlatformSpecificUri)",
              "getter": "getPlatformSpecificPlaybackUris()",
              "adderAll": "addPlatformSpecificPlaybackUris(List<PlatformSpecificUri>)"
            },
            "recommendationReason": {
              "type": "@NonNull RecommendationReason",
              "requirement": "Optional",
              "setter": "setRecommendationReason(@NonNull RecommendationReason)",
              "getter": "getRecommendationReason()"
            },
            "description": {
              "type": "@NonNull String",
              "requirement": "Optional",
              "setter": "setDescription(@NonNull String)",
              "getter": "getDescription()"
            },
            "contentRatingsLegacies": {
              "requirement": "Required",
              "adder": "addContentRatingsLegacy(String)",
              "type": "List<List<String>>",
              "getter": "getContentRatingsLegacy()",
              "adderAll": "addContentRatingsLegacy(List<String>)"
            },
            "callToActionText": {
              "requirement": "Optional",
              "setter": "setCallToActionText(@NonNull String)",
              "type": "@NonNull String",
              "getter": "getCallToActionText()"
            },
            "tags": {
              "requirement": "Optional",
              "adder": "addTag(@NonNull String)",
              "type": "List<@NonNull String>",
              "adderAll": "addTags(List<String>)",
              "getter": "getTags()"
            }
          }
        },
        "TvShowEntity": {
          "package": "com.google.android.engage.video.datamodel.TvShowEntity",
          "fields": {
            "entityId": {
              "type": "String",
              "requirement": "Optional",
              "setter": "setEntityId(String)",
              "getter": "getEntityId()"
            },
            "posterImages": {
              "type": "List<Image>",
              "requirement": "Required",
              "adder": "addPosterImage(Image)",
              "getter": "getPosterImages()",
              "adderAll": "addPosterImages(List<Image>)"
            },
            "name": {
              "type": "String",
              "requirement": "Required",
              "setter": "setName(String)",
              "getter": "getName()"
            },
            "lastEngagementTimeMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setLastEngagementTimeMillis(long)",
              "getter": "getLastEngagementTimeMillis()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "watchNextType": {
              "type": "@WatchNextType int",
              "requirement": "Optional",
              "setter": "setWatchNextType(@WatchNextType int)",
              "getter": "getWatchNextType()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "lastPlayBackPositionTimeMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setLastPlayBackPositionTimeMillis(long)",
              "getter": "getLastPlayBackPositionTimeMillis()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "availabilityTimeWindows": {
              "type": "List<DisplayTimeWindow>",
              "requirement": "Optional",
              "adder": "addAvailabilityTimeWindow(DisplayTimeWindow)",
              "getter": "getAvailabilityTimeWindows()"
            },
            "allAvailabilityTimeWindows": {
              "type": "List<List<DisplayTimeWindow>>",
              "requirement": "Optional",
              "adder": "addAllAvailabilityTimeWindows(DisplayTimeWindow)",
              "adderAll": "addAllAvailabilityTimeWindows(List<DisplayTimeWindow>)"
            },
            "infoPageUri": {
              "type": "Uri",
              "requirement": "Required",
              "setter": "setInfoPageUri(Uri)",
              "getter": "getInfoPageUri()"
            },
            "playBackUri": {
              "type": "Uri",
              "requirement": "Optional",
              "setter": "setPlayBackUri(Uri)",
              "getter": "getPlayBackUri()"
            },
            "firstEpisodeAirDateEpochMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setFirstEpisodeAirDateEpochMillis(long)",
              "getter": "getFirstEpisodeAirDateEpochMillis()"
            },
            "latestEpisodeAirDateEpochMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setLatestEpisodeAirDateEpochMillis(long)",
              "getter": "getLatestEpisodeAirDateEpochMillis()"
            },
            "availability": {
              "type": "@ContentAvailability int",
              "requirement": "Required",
              "setter": "setAvailability(@ContentAvailability int)",
              "getter": "getAvailability()"
            },
            "seasonCount": {
              "type": "Integer",
              "requirement": "Required",
              "setter": "setSeasonCount(int)",
              "getter": "getSeasonCount()"
            },
            "genres": {
              "type": "List<String>",
              "requirement": "Optional",
              "adder": "addGenre(String)",
              "getter": "getGenres()",
              "adderAll": "addGenres(List<String>)"
            },
            "contentRatings": {
              "type": "List<String>",
              "requirement": "Required",
              "adder": "addContentRating(RatingSystem)",
              "getter": "getContentRatings()",
              "adderAll": "addContentRatings(List<RatingSystem>)"
            },
            "price": {
              "type": "Price",
              "requirement": "Optional",
              "setter": "setPrice(Price)",
              "getter": "getPrice()"
            },
            "platformSpecificPlaybackUris": {
              "type": "List<PlatformSpecificUri>",
              "requirement": "Required",
              "adder": "addPlatformSpecificPlaybackUri(PlatformSpecificUri)",
              "getter": "getPlatformSpecificPlaybackUris()",
              "adderAll": "addPlatformSpecificPlaybackUris(List<PlatformSpecificUri>)"
            },
            "recommendationReason": {
              "type": "@NonNull RecommendationReason",
              "requirement": "Optional",
              "setter": "setRecommendationReason(@NonNull RecommendationReason)",
              "getter": "getRecommendationReason()"
            },
            "description": {
              "type": "@NonNull String",
              "requirement": "Optional",
              "setter": "setDescription(@NonNull String)",
              "getter": "getDescription()"
            },
            "contentRatingsLegacies": {
              "requirement": "Required",
              "adder": "addContentRatingsLegacy(String)",
              "type": "List<List<String>>",
              "getter": "getContentRatingsLegacy()",
              "adderAll": "addContentRatingsLegacy(List<String>)"
            },
            "callToActionText": {
              "requirement": "Optional",
              "setter": "setCallToActionText(@NonNull String)",
              "type": "@NonNull String",
              "getter": "getCallToActionText()"
            },
            "tags": {
              "requirement": "Optional",
              "adder": "addTag(@NonNull String)",
              "type": "List<@NonNull String>",
              "adderAll": "addTags(List<String>)",
              "getter": "getTags()"
            }
          }
        },
        "TvSeasonEntity": {
          "package": "com.google.android.engage.video.datamodel.TvSeasonEntity",
          "fields": {
            "entityId": {
              "type": "String",
              "requirement": "Optional",
              "setter": "setEntityId(String)",
              "getter": "getEntityId()"
            },
            "posterImages": {
              "type": "List<Image>",
              "requirement": "Required",
              "adder": "addPosterImage(Image)",
              "getter": "getPosterImages()",
              "adderAll": "addPosterImages(List<Image>)"
            },
            "name": {
              "type": "String",
              "requirement": "Required",
              "setter": "setName(String)",
              "getter": "getName()"
            },
            "lastEngagementTimeMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setLastEngagementTimeMillis(long)",
              "getter": "getLastEngagementTimeMillis()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "watchNextType": {
              "type": "@WatchNextType int",
              "requirement": "Optional",
              "setter": "setWatchNextType(@WatchNextType int)",
              "getter": "getWatchNextType()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "lastPlayBackPositionTimeMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setLastPlayBackPositionTimeMillis(long)",
              "getter": "getLastPlayBackPositionTimeMillis()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "availabilityTimeWindows": {
              "type": "List<DisplayTimeWindow>",
              "requirement": "Optional",
              "adder": "addAvailabilityTimeWindow(DisplayTimeWindow)",
              "getter": "getAvailabilityTimeWindows()"
            },
            "allAvailabilityTimeWindows": {
              "type": "List<List<DisplayTimeWindow>>",
              "requirement": "Optional",
              "adder": "addAllAvailabilityTimeWindows(DisplayTimeWindow)",
              "adderAll": "addAllAvailabilityTimeWindows(List<DisplayTimeWindow>)"
            },
            "infoPageUri": {
              "type": "Uri",
              "requirement": "Required",
              "setter": "setInfoPageUri(Uri)",
              "getter": "getInfoPageUri()"
            },
            "playBackUri": {
              "type": "Uri",
              "requirement": "Optional",
              "setter": "setPlayBackUri(Uri)",
              "getter": "getPlayBackUri()"
            },
            "seasonNumber": {
              "type": "Integer",
              "requirement": "Required",
              "setter": "setSeasonNumber(int)"
            },
            "seasonDisplayNumber": {
              "type": "String",
              "requirement": "Required",
              "setter": "setSeasonDisplayNumber(String)",
              "getter": "getSeasonDisplayNumber()"
            },
            "firstEpisodeAirDateEpochMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setFirstEpisodeAirDateEpochMillis(long)",
              "getter": "getFirstEpisodeAirDateEpochMillis()"
            },
            "latestEpisodeAirDateEpochMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setLatestEpisodeAirDateEpochMillis(long)",
              "getter": "getLatestEpisodeAirDateEpochMillis()"
            },
            "availability": {
              "type": "@ContentAvailability int",
              "requirement": "Required",
              "setter": "setAvailability(@ContentAvailability int)",
              "getter": "getAvailability()"
            },
            "episodeCount": {
              "type": "Integer",
              "requirement": "Required",
              "setter": "setEpisodeCount(int)",
              "getter": "getEpisodeCount()"
            },
            "genres": {
              "type": "List<String>",
              "requirement": "Optional",
              "adder": "addGenre(String)",
              "getter": "getGenres()",
              "adderAll": "addGenres(List<String>)"
            },
            "contentRatings": {
              "type": "List<String>",
              "requirement": "Required",
              "adder": "addContentRating(RatingSystem)",
              "getter": "getContentRatings()",
              "adderAll": "addContentRatings(List<RatingSystem>)"
            },
            "price": {
              "type": "Price",
              "requirement": "Optional",
              "setter": "setPrice(Price)",
              "getter": "getPrice()"
            },
            "contentRatingsLegacies": {
              "requirement": "Required",
              "adder": "addContentRatingsLegacy(String)",
              "type": "List<List<String>>",
              "getter": "getContentRatingsLegacy()",
              "adderAll": "addContentRatingsLegacy(List<String>)"
            }
          }
        },
        "TvEpisodeEntity": {
          "package": "com.google.android.engage.video.datamodel.TvEpisodeEntity",
          "fields": {
            "entityId": {
              "type": "String",
              "requirement": "Optional",
              "setter": "setEntityId(String)",
              "getter": "getEntityId()"
            },
            "posterImages": {
              "type": "List<Image>",
              "requirement": "Required",
              "adder": "addPosterImage(Image)",
              "getter": "getPosterImages()",
              "adderAll": "addPosterImages(List<Image>)"
            },
            "name": {
              "type": "String",
              "requirement": "Required",
              "setter": "setName(String)",
              "getter": "getName()"
            },
            "lastEngagementTimeMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setLastEngagementTimeMillis(long)",
              "getter": "getLastEngagementTimeMillis()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "watchNextType": {
              "type": "@WatchNextType int",
              "requirement": "Optional",
              "setter": "setWatchNextType(@WatchNextType int)",
              "getter": "getWatchNextType()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "lastPlayBackPositionTimeMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setLastPlayBackPositionTimeMillis(long)",
              "getter": "getLastPlayBackPositionTimeMillis()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "availabilityTimeWindows": {
              "type": "List<DisplayTimeWindow>",
              "requirement": "Optional",
              "adder": "addAvailabilityTimeWindow(DisplayTimeWindow)",
              "getter": "getAvailabilityTimeWindows()"
            },
            "allAvailabilityTimeWindows": {
              "type": "List<List<DisplayTimeWindow>>",
              "requirement": "Optional",
              "adder": "addAllAvailabilityTimeWindows(DisplayTimeWindow)",
              "adderAll": "addAllAvailabilityTimeWindows(List<DisplayTimeWindow>)"
            },
            "playBackUri": {
              "type": "Uri",
              "requirement": "Required",
              "setter": "setPlayBackUri(Uri)",
              "getter": "getPlayBackUri()"
            },
            "infoPageUri": {
              "type": "Uri",
              "requirement": "Optional",
              "setter": "setInfoPageUri(Uri)",
              "getter": "getInfoPageUri()"
            },
            "episodeNumber": {
              "type": "Integer",
              "requirement": "Required",
              "setter": "setEpisodeNumber(int)"
            },
            "episodeDisplayNumber": {
              "type": "String",
              "requirement": "Required",
              "setter": "setEpisodeDisplayNumber(String)",
              "getter": "getEpisodeDisplayNumber()"
            },
            "airDateEpochMillis": {
              "type": "Long",
              "requirement": "Required",
              "setter": "setAirDateEpochMillis(long)",
              "getter": "getAirDateEpochMillis()"
            },
            "availability": {
              "type": "@ContentAvailability int",
              "requirement": "Required",
              "setter": "setAvailability(@ContentAvailability int)",
              "getter": "getAvailability()"
            },
            "genres": {
              "type": "List<String>",
              "requirement": "Optional",
              "adder": "addGenre(String)",
              "getter": "getGenres()",
              "adderAll": "addGenres(List<String>)"
            },
            "contentRatings": {
              "type": "List<String>",
              "requirement": "Required",
              "adder": "addContentRating(RatingSystem)",
              "getter": "getContentRatings()",
              "adderAll": "addContentRatings(List<RatingSystem>)"
            },
            "durationMillis": {
              "type": "Long",
              "requirement": "Required",
              "setter": "setDurationMillis(long)",
              "getter": "getDurationMillis()"
            },
            "seasonNumber": {
              "type": "String",
              "requirement": "Optional",
              "setter": "setSeasonNumber(String)",
              "getter": "getSeasonNumber()"
            },
            "seasonTitle": {
              "type": "String",
              "requirement": "Optional",
              "setter": "setSeasonTitle(String)",
              "getter": "getSeasonTitle()"
            },
            "downloadedOnDevice": {
              "type": "Boolean",
              "requirement": "Optional",
              "setter": "setDownloadedOnDevice(boolean)",
              "getter": "isDownloadedOnDevice()"
            },
            "price": {
              "type": "Price",
              "requirement": "Optional",
              "setter": "setPrice(Price)",
              "getter": "getPrice()"
            },
            "showTitle": {
              "type": "String",
              "requirement": "Optional",
              "setter": "setShowTitle(String)",
              "getter": "getShowTitle()"
            },
            "isNextEpisodeAvailable": {
              "type": "Boolean",
              "requirement": "Optional",
              "setter": "setIsNextEpisodeAvailable(boolean)",
              "getter": "getIsNextEpisodeAvailable()"
            },
            "platformSpecificPlaybackUris": {
              "type": "List<PlatformSpecificUri>",
              "requirement": "Optional",
              "adder": "addPlatformSpecificPlaybackUri(PlatformSpecificUri)",
              "getter": "getPlatformSpecificPlaybackUris()",
              "adderAll": "addPlatformSpecificPlaybackUris(List<PlatformSpecificUri>)"
            },
            "contentRatingsLegacies": {
              "requirement": "Required",
              "adder": "addContentRatingsLegacy(String)",
              "type": "List<List<String>>",
              "getter": "getContentRatingsLegacy()",
              "adderAll": "addContentRatingsLegacy(List<String>)"
            },
            "callToActionText": {
              "requirement": "Optional",
              "setter": "setCallToActionText(@NonNull String)",
              "type": "@NonNull String",
              "getter": "getCallToActionText()"
            },
            "tags": {
              "requirement": "Optional",
              "adder": "addTag(@NonNull String)",
              "type": "List<@NonNull String>",
              "adderAll": "addTags(List<String>)",
              "getter": "getTags()"
            }
          }
        },
        "MediaActionFeedEntity": {
          "package": "com.google.android.engage.video.datamodel.MediaActionFeedEntity",
          "fields": {
            "dataFeedElementId": {
              "type": "@NonNull String",
              "requirement": "Required",
              "setter": "setDataFeedElementId(@NonNull String)",
              "getter": "getDataFeedElementId()"
            },
            "name": {
              "type": "@NonNull String",
              "requirement": "Optional",
              "setter": "setName(@NonNull String)",
              "getter": "getName()"
            },
            "recommendationReason": {
              "type": "@NonNull RecommendationReason",
              "requirement": "Optional",
              "setter": "setRecommendationReason(@NonNull RecommendationReason)",
              "getter": "getRecommendationReason()"
            },
            "description": {
              "type": "@NonNull String",
              "requirement": "Optional",
              "setter": "setDescription(@NonNull String)",
              "getter": "getDescription()"
            },
            "posterImages": {
              "type": "List<List<Image>>",
              "requirement": "Optional",
              "adder": "addPosterImage(@NonNull Image)",
              "getter": "getPosterImages()",
              "adderAll": "addPosterImages(List<Image>)"
            },
            "callToActionText": {
              "requirement": "Optional",
              "setter": "setCallToActionText(@NonNull String)",
              "type": "@NonNull String",
              "getter": "getCallToActionText()"
            },
            "tags": {
              "requirement": "Optional",
              "adder": "addTag(@NonNull String)",
              "type": "List<@NonNull String>",
              "adderAll": "addTags(List<String>)",
              "getter": "getTags()"
            }
          }
        },
        "LiveTvProgramEntity": {
          "package": "com.google.android.engage.video.datamodel.LiveTvProgramEntity",
          "fields": {
            "channelId": {
              "type": "@NonNull String",
              "requirement": "Optional",
              "setter": "setChannelId(@NonNull String)",
              "getter": "getChannelId()"
            },
            "channelName": {
              "type": "@NonNull String",
              "requirement": "Optional",
              "setter": "setChannelName(@NonNull String)",
              "getter": "getChannelName()"
            },
            "channelLogoImage": {
              "type": "@NonNull Image",
              "requirement": "Optional",
              "setter": "setChannelLogoImage(@NonNull Image)",
              "getter": "getChannelLogoImage()"
            },
            "platformSpecificPlaybackUris": {
              "type": "List<@NonNull PlatformSpecificUri>",
              "requirement": "Optional",
              "adder": "addPlatformSpecificPlaybackUri(@NonNull PlatformSpecificUri)",
              "getter": "getPlatformSpecificPlaybackUris()",
              "adderAll": "addPlatformSpecificPlaybackUris(List<PlatformSpecificUri>)"
            },
            "contentRatings": {
              "type": "List<@NonNull RatingSystem>",
              "requirement": "Optional",
              "adder": "addContentRating(@NonNull RatingSystem)",
              "getter": "getContentRatings()",
              "adderAll": "addContentRatings(List<RatingSystem>)"
            },
            "genres": {
              "type": "List<@NonNull String>",
              "requirement": "Optional",
              "adder": "addGenre(@NonNull String)",
              "getter": "getGenres()",
              "adderAll": "addGenres(List<String>)"
            },
            "availabilityTimeWindows": {
              "type": "List<@NonNull DisplayTimeWindow>",
              "requirement": "Optional",
              "adder": "addAvailabilityTimeWindow(@NonNull DisplayTimeWindow)",
              "getter": "getAvailabilityTimeWindows()",
              "adderAll": "addAvailabilityTimeWindows(List<DisplayTimeWindow>)"
            },
            "posterImages": {
              "type": "List<@NonNull Image>",
              "requirement": "Optional",
              "adder": "addPosterImage(@NonNull Image)",
              "getter": "getPosterImages()",
              "adderAll": "addPosterImages(List<Image>)"
            },
            "recommendationReason": {
              "type": "@NonNull RecommendationReason",
              "requirement": "Optional",
              "setter": "setRecommendationReason(@NonNull RecommendationReason)",
              "getter": "getRecommendationReason()"
            },
            "description": {
              "type": "@NonNull String",
              "requirement": "Optional",
              "setter": "setDescription(@NonNull String)",
              "getter": "getDescription()"
            },
            "entityId": {
              "type": "@NonNull String",
              "requirement": "Optional",
              "setter": "setEntityId(@NonNull String)",
              "getter": "getEntityId()"
            },
            "name": {
              "type": "@NonNull String",
              "requirement": "Optional",
              "setter": "setName(@NonNull String)",
              "getter": "getName()"
            },
            "callToActionText": {
              "requirement": "Optional",
              "setter": "setCallToActionText(@NonNull String)",
              "type": "@NonNull String",
              "getter": "getCallToActionText()"
            },
            "tags": {
              "requirement": "Optional",
              "adder": "addTag(@NonNull String)",
              "type": "List<@NonNull String>",
              "adderAll": "addTags(List<String>)",
              "getter": "getTags()"
            }
          }
        },
        "LiveStreamingVideoEntity": {
          "package": "com.google.android.engage.video.datamodel.LiveStreamingVideoEntity",
          "fields": {
            "entityId": {
              "type": "String",
              "requirement": "Optional",
              "setter": "setEntityId(String)",
              "getter": "getEntityId()"
            },
            "posterImages": {
              "type": "List<Image>",
              "requirement": "Required",
              "adder": "addPosterImage(Image)",
              "getter": "getPosterImages()",
              "adderAll": "addPosterImages(List<Image>)"
            },
            "name": {
              "type": "String",
              "requirement": "Required",
              "setter": "setName(String)",
              "getter": "getName()"
            },
            "lastEngagementTimeMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setLastEngagementTimeMillis(long)",
              "getter": "getLastEngagementTimeMillis()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "watchNextType": {
              "type": "@WatchNextType int",
              "requirement": "Optional",
              "setter": "setWatchNextType(@WatchNextType int)",
              "getter": "getWatchNextType()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "lastPlayBackPositionTimeMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setLastPlayBackPositionTimeMillis(long)",
              "getter": "getLastPlayBackPositionTimeMillis()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "availabilityTimeWindows": {
              "type": "List<DisplayTimeWindow>",
              "requirement": "Optional",
              "adder": "addAvailabilityTimeWindow(DisplayTimeWindow)",
              "getter": "getAvailabilityTimeWindows()"
            },
            "allAvailabilityTimeWindows": {
              "type": "List<List<DisplayTimeWindow>>",
              "requirement": "Optional",
              "adder": "addAllAvailabilityTimeWindows(DisplayTimeWindow)",
              "adderAll": "addAllAvailabilityTimeWindows(List<DisplayTimeWindow>)"
            },
            "playBackUri": {
              "type": "Uri",
              "requirement": "Required",
              "setter": "setPlayBackUri(Uri)",
              "getter": "getPlayBackUri()"
            },
            "startTimeEpochMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setStartTimeEpochMillis(long)",
              "getter": "getStartTimeEpochMillis()"
            },
            "endTimeEpochMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setEndTimeEpochMillis(long)",
              "getter": "getEndTimeEpochMillis()"
            },
            "broadcaster": {
              "type": "String",
              "requirement": "Required",
              "setter": "setBroadcaster(String)",
              "getter": "getBroadcaster()"
            },
            "viewCount": {
              "type": "String",
              "requirement": "Optional",
              "setter": "setViewCount(String)",
              "getter": "getViewCount()"
            },
            "broadcasterIcon": {
              "type": "Image",
              "requirement": "Optional",
              "setter": "setBroadcasterIcon(Image)",
              "getter": "getBroadcasterIcon()"
            },
            "platformSpecificPlaybackUris": {
              "type": "List<PlatformSpecificUri>",
              "requirement": "Optional",
              "adder": "addPlatformSpecificPlaybackUri(PlatformSpecificUri)",
              "getter": "getPlatformSpecificPlaybackUris()",
              "adderAll": "addPlatformSpecificPlaybackUris(List<PlatformSpecificUri>)"
            },
            "description": {
              "type": "@NonNull String",
              "requirement": "Optional",
              "setter": "setDescription(@NonNull String)",
              "getter": "getDescription()"
            },
            "genres": {
              "type": "List<@NonNull String>",
              "requirement": "Optional",
              "adder": "addGenre(@NonNull String)",
              "getter": "getGenres()",
              "adderAll": "addGenres(List<String>)"
            },
            "contentRatings": {
              "type": "List<@NonNull RatingSystem>",
              "requirement": "Optional",
              "adder": "addContentRating(@NonNull RatingSystem)",
              "getter": "getContentRatings()",
              "adderAll": "addContentRatings(List<RatingSystem>)"
            },
            "recommendationReason": {
              "type": "@NonNull RecommendationReason",
              "requirement": "Optional",
              "setter": "setRecommendationReason(@NonNull RecommendationReason)",
              "getter": "getRecommendationReason()"
            },
            "callToActionText": {
              "requirement": "Optional",
              "setter": "setCallToActionText(@NonNull String)",
              "type": "@NonNull String",
              "getter": "getCallToActionText()"
            },
            "tags": {
              "requirement": "Optional",
              "adder": "addTag(@NonNull String)",
              "type": "List<@NonNull String>",
              "adderAll": "addTags(List<String>)",
              "getter": "getTags()"
            }
          }
        },
        "LiveTvChannelEntity": {
          "package": "com.google.android.engage.video.datamodel.LiveTvChannelEntity",
          "fields": {
            "entityId": {
              "type": "@NonNull String",
              "requirement": "Optional",
              "setter": "setEntityId(@NonNull String)",
              "getter": "getEntityId()"
            },
            "name": {
              "type": "@NonNull String",
              "requirement": "Optional",
              "setter": "setName(@NonNull String)",
              "getter": "getName()"
            },
            "description": {
              "type": "@NonNull String",
              "requirement": "Optional",
              "setter": "setDescription(@NonNull String)",
              "getter": "getDescription()"
            },
            "logoImage": {
              "type": "@NonNull Image",
              "requirement": "Optional",
              "setter": "setLogoImage(@NonNull Image)",
              "getter": "getLogoImage()"
            },
            "contentRatings": {
              "type": "List<@NonNull RatingSystem>",
              "requirement": "Optional",
              "adder": "addContentRating(@NonNull RatingSystem)",
              "getter": "getContentRatings()",
              "adderAll": "addContentRatings(List<RatingSystem>)"
            },
            "platformSpecificPlaybackUris": {
              "type": "List<@NonNull PlatformSpecificUri>",
              "requirement": "Optional",
              "adder": "addPlatformSpecificPlaybackUri(@NonNull PlatformSpecificUri)",
              "getter": "getPlatformSpecificPlaybackUris()",
              "adderAll": "addPlatformSpecificPlaybackUris(List<PlatformSpecificUri>)"
            },
            "recommendationReason": {
              "type": "@NonNull RecommendationReason",
              "requirement": "Optional",
              "setter": "setRecommendationReason(@NonNull RecommendationReason)",
              "getter": "getRecommendationReason()"
            },
            "callToActionText": {
              "requirement": "Optional",
              "setter": "setCallToActionText(@NonNull String)",
              "type": "@NonNull String",
              "getter": "getCallToActionText()"
            },
            "tags": {
              "requirement": "Optional",
              "adder": "addTag(@NonNull String)",
              "type": "List<@NonNull String>",
              "adderAll": "addTags(List<String>)",
              "getter": "getTags()"
            }
          }
        },
        "VideoClipEntity": {
          "package": "com.google.android.engage.video.datamodel.VideoClipEntity",
          "fields": {
            "entityId": {
              "type": "String",
              "requirement": "Optional",
              "setter": "setEntityId(String)",
              "getter": "getEntityId()"
            },
            "posterImages": {
              "type": "List<Image>",
              "requirement": "Required",
              "adder": "addPosterImage(Image)",
              "getter": "getPosterImages()",
              "adderAll": "addPosterImages(List<Image>)"
            },
            "name": {
              "type": "String",
              "requirement": "Required",
              "setter": "setName(String)",
              "getter": "getName()"
            },
            "lastEngagementTimeMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setLastEngagementTimeMillis(long)",
              "getter": "getLastEngagementTimeMillis()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "watchNextType": {
              "type": "@WatchNextType int",
              "requirement": "Optional",
              "setter": "setWatchNextType(@WatchNextType int)",
              "getter": "getWatchNextType()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "lastPlayBackPositionTimeMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setLastPlayBackPositionTimeMillis(long)",
              "getter": "getLastPlayBackPositionTimeMillis()",
              "requiredFor": [
                "ContinuationCluster"
              ]
            },
            "availabilityTimeWindows": {
              "type": "List<DisplayTimeWindow>",
              "requirement": "Optional",
              "adder": "addAvailabilityTimeWindow(DisplayTimeWindow)",
              "getter": "getAvailabilityTimeWindows()"
            },
            "allAvailabilityTimeWindows": {
              "type": "List<List<DisplayTimeWindow>>",
              "requirement": "Optional",
              "adder": "addAllAvailabilityTimeWindows(DisplayTimeWindow)",
              "adderAll": "addAllAvailabilityTimeWindows(List<DisplayTimeWindow>)"
            },
            "playBackUri": {
              "type": "Uri",
              "requirement": "Required",
              "setter": "setPlayBackUri(Uri)",
              "getter": "getPlayBackUri()"
            },
            "createdTimeEpochMillis": {
              "type": "Long",
              "requirement": "Required",
              "setter": "setCreatedTimeEpochMillis(long)",
              "getter": "getCreatedTimeEpochMillis()"
            },
            "durationMillis": {
              "type": "Long",
              "requirement": "Required",
              "setter": "setDurationMillis(long)",
              "getter": "getDurationMillis()"
            },
            "creator": {
              "type": "String",
              "requirement": "Required",
              "setter": "setCreator(String)",
              "getter": "getCreator()"
            },
            "creatorImage": {
              "type": "Image",
              "requirement": "Optional",
              "setter": "setCreatorImage(Image)",
              "getter": "getCreatorImage()"
            },
            "viewCount": {
              "type": "String",
              "requirement": "Optional",
              "setter": "setViewCount(String)",
              "getter": "getViewCount()"
            },
            "downloadedOnDevice": {
              "type": "Boolean",
              "requirement": "Optional",
              "setter": "setDownloadedOnDevice(boolean)",
              "getter": "isDownloadedOnDevice()"
            },
            "platformSpecificPlaybackUris": {
              "type": "List<PlatformSpecificUri>",
              "requirement": "Optional",
              "adder": "addPlatformSpecificPlaybackUri(PlatformSpecificUri)",
              "getter": "getPlatformSpecificPlaybackUris()",
              "adderAll": "addPlatformSpecificPlaybackUris(List<PlatformSpecificUri>)"
            },
            "callToActionText": {
              "requirement": "Optional",
              "setter": "setCallToActionText(@NonNull String)",
              "type": "@NonNull String",
              "getter": "getCallToActionText()"
            },
            "tags": {
              "requirement": "Optional",
              "adder": "addTag(@NonNull String)",
              "type": "List<@NonNull String>",
              "adderAll": "addTags(List<String>)",
              "getter": "getTags()"
            }
          }
        },
        "RatingSystem": {
          "package": "com.google.android.engage.video.datamodel.RatingSystem",
          "fields": {
            "rating": {
              "type": "@NonNull String",
              "requirement": "Required",
              "setter": "setRating(@NonNull String)",
              "getter": "getRating()"
            },
            "agencyName": {
              "type": "@NonNull String",
              "requirement": "Required",
              "setter": "setAgencyName(@NonNull String)",
              "getter": "getAgencyName()"
            }
          }
        },
        "PlatformSpecificUri": {
          "package": "com.google.android.engage.common.datamodel.PlatformSpecificUri",
          "fields": {
            "platformType": {
              "type": "@PlatformType int",
              "requirement": "Required",
              "setter": "setPlatformType(@PlatformType int)",
              "getter": "getPlatformType()"
            },
            "actionUri": {
              "type": "Uri",
              "requirement": "Required",
              "setter": "setActionUri(Uri)",
              "getter": "getActionUri()"
            }
          }
        },
        "SubscriptionEntitlement": {
          "package": "com.google.android.engage.common.datamodel.SubscriptionEntitlement",
          "fields": {
            "entitlementId": {
              "type": "String",
              "requirement": "Required",
              "setter": "setEntitlementId(String)",
              "getter": "getEntitlementId()"
            },
            "displayName": {
              "type": "String",
              "requirement": "Optional",
              "setter": "setDisplayName(String)",
              "getter": "getDisplayName()"
            },
            "expirationTimeMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setExpirationTimeMillis(long)",
              "getter": "getExpirationTimeMillis()"
            }
          }
        },
        "BundledSubscription": {
          "package": "com.google.android.engage.common.datamodel.BundledSubscription",
          "fields": {
            "bundledSubscriptionProviderPackageName": {
              "type": "String",
              "requirement": "Optional",
              "setter": "setBundledSubscriptionProviderPackageName(String)",
              "getter": "getBundledSubscriptionProviderPackageName()"
            },
            "subscriptionType": {
              "type": "@SubscriptionType int",
              "requirement": "Optional",
              "setter": "setSubscriptionType(@SubscriptionType int)",
              "getter": "getSubscriptionType()"
            },
            "expirationTimeMillis": {
              "type": "Long",
              "requirement": "Optional",
              "setter": "setExpirationTimeMillis(long)",
              "getter": "getExpirationTimeMillis()"
            },
            "entitlements": {
              "type": "List<SubscriptionEntitlement>",
              "requirement": "Optional",
              "adder": "addEntitlement(SubscriptionEntitlement)",
              "getter": "getEntitlements()",
              "adderAll": "addEntitlements(List<SubscriptionEntitlement>)"
            }
          }
        }
      },
      "methods": {
        "isServiceAvailable": null,
        "publishRecommendationClusters": "PublishRecommendationClustersRequest",
        "publishFeaturedCluster": "PublishFeaturedClusterRequest",
        "publishContinuationCluster": "PublishContinuationClusterRequest",
        "publishSubscription": "PublishSubscriptionRequest",
        "publishUserAccountManagementRequest": "PublishUserAccountManagementRequest",
        "updatePublishStatus": "PublishStatusRequest",
        "deleteRecommendationsClusters": "DeleteClustersRequest",
        "deleteFeaturedCluster": "DeleteClustersRequest",
        "deleteContinuationCluster": "DeleteClustersRequest",
        "deleteSubscription": "DeleteClustersRequest",
        "deleteUserManagementCluster": "DeleteClustersRequest"
      },
      "intents": {}
    }