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

{
  "client": "com.google.android.engage.food.service.AppEngageFoodClient",
  "clusterTypes": [
    "TYPE_RECOMMENDATION",
    "TYPE_FEATURED",
    "TYPE_FOOD_SHOPPING_CART",
    "TYPE_FOOD_SHOPPING_LIST",
    "TYPE_FOOD_REORDER"
  ],
  "entities": {
    "ProductEntity": {
      "package": "com.google.android.engage.food.datamodel.ProductEntity",
      "fields": {
        "entityId": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setEntityId(String)",
          "getter": "getEntityId()"
        },
        "actionLinkUri": {
          "type": "Uri",
          "requirement": "Required",
          "setter": "setActionLinkUri(Uri)",
          "getter": "getActionLinkUri()"
        },
        "posterImages": {
          "type": "List<Image>",
          "requirement": "Required",
          "adder": "addPosterImage(Image)",
          "getter": "getPosterImages()",
          "adderAll": "addPosterImages(List<Image>)"
        },
        "rating": {
          "type": "Rating",
          "requirement": "Optional",
          "setter": "setRating(Rating)",
          "getter": "getRating()",
          "requiredFor": [
            "Required if strikethrough price is provided",
            "Mutually required with other rating fields"
          ]
        },
        "title": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setTitle(String)",
          "getter": "getTitle()"
        },
        "displayTimeWindows": {
          "type": "List<DisplayTimeWindow>",
          "requirement": "Optional",
          "adder": "addDisplayTimeWindow(DisplayTimeWindow)",
          "getter": "getDisplayTimeWindows()"
        },
        "allDisplayTimeWindows": {
          "type": "List<List<DisplayTimeWindow>>",
          "requirement": "Optional",
          "adder": "addAllDisplayTimeWindow(DisplayTimeWindow)",
          "adderAll": "addAllDisplayTimeWindow(List<DisplayTimeWindow>)"
        },
        "callout": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setCallout(String)",
          "getter": "getCallout()"
        },
        "calloutFinePrint": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setCalloutFinePrint(String)",
          "getter": "getCalloutFinePrint()"
        },
        "price": {
          "type": "Price",
          "requirement": "Optional",
          "setter": "setPrice(Price)",
          "getter": "getPrice()",
          "requiredFor": [
            "Required if strikethrough price is provided"
          ]
        }
      }
    },
    "StoreEntity": {
      "package": "com.google.android.engage.food.datamodel.StoreEntity",
      "fields": {
        "entityId": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setEntityId(String)",
          "getter": "getEntityId()"
        },
        "actionLinkUri": {
          "type": "Uri",
          "requirement": "Required",
          "setter": "setActionLinkUri(Uri)",
          "getter": "getActionLinkUri()"
        },
        "posterImages": {
          "type": "List<Image>",
          "requirement": "Required",
          "adder": "addPosterImage(Image)",
          "getter": "getPosterImages()",
          "adderAll": "addPosterImages(List<Image>)"
        },
        "rating": {
          "type": "Rating",
          "requirement": "Optional",
          "setter": "setRating(Rating)",
          "getter": "getRating()",
          "requiredFor": [
            "Mutually required with other rating fields"
          ]
        },
        "title": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setTitle(String)",
          "getter": "getTitle()"
        },
        "location": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setLocation(String)",
          "getter": "getLocation()"
        },
        "category": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setCategory(String)",
          "getter": "getCategory()"
        },
        "callout": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setCallout(String)",
          "getter": "getCallout()"
        },
        "calloutFinePrint": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setCalloutFinePrint(String)",
          "getter": "getCalloutFinePrint()"
        },
        "description": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setDescription(String)",
          "getter": "getDescription()"
        },
        "displayTimeWindows": {
          "type": "List<DisplayTimeWindow>",
          "requirement": "Optional",
          "adder": "addDisplayTimeWindow(DisplayTimeWindow)",
          "getter": "getDisplayTimeWindows()"
        },
        "allDisplayTimeWindows": {
          "type": "List<List<DisplayTimeWindow>>",
          "requirement": "Optional",
          "adder": "addAllDisplayTimeWindow(DisplayTimeWindow)",
          "adderAll": "addAllDisplayTimeWindow(List<DisplayTimeWindow>)"
        }
      }
    },
    "RestaurantReservationEntity": {
      "package": "com.google.android.engage.food.datamodel.RestaurantReservationEntity",
      "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>)"
        },
        "actionUri": {
          "type": "Uri",
          "requirement": "Required",
          "setter": "setActionUri(Uri)",
          "getter": "getActionUri()"
        },
        "title": {
          "type": "String",
          "requirement": "Required",
          "setter": "setTitle(String)",
          "getter": "getTitle()"
        },
        "description": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setDescription(String)",
          "getter": "getDescription()"
        },
        "subtitles": {
          "type": "List<String>",
          "requirement": "Optional",
          "adder": "addSubtitle(String)",
          "adderAll": "addSubtitles(List<String>)"
        },
        "location": {
          "type": "Address",
          "requirement": "Required",
          "setter": "setLocation(Address)",
          "getter": "getLocation()"
        },
        "reservationStartTime": {
          "type": "Long",
          "requirement": "Required",
          "setter": "setReservationStartTime(Long)",
          "getter": "getReservationStartTime()"
        },
        "localizedReservationStartTime": {
          "type": "LocalizedTimestamp",
          "requirement": "Required",
          "setter": "setLocalizedReservationStartTime(LocalizedTimestamp)",
          "getter": "getLocalizedReservationStartTime()"
        },
        "tableSize": {
          "type": "Integer",
          "requirement": "Optional",
          "setter": "setTableSize(Integer)",
          "getter": "getTableSize()"
        },
        "reservationId": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setReservationId(String)",
          "getter": "getReservationId()"
        },
        "displayTimeWindows": {
          "type": "List<DisplayTimeWindow>",
          "requirement": "Optional",
          "adder": "addDisplayTimeWindow(DisplayTimeWindow)",
          "getter": "getDisplayTimeWindows()"
        },
        "allDisplayTimeWindows": {
          "type": "List<List<DisplayTimeWindow>>",
          "requirement": "Optional",
          "adder": "addAllDisplayTimeWindow(DisplayTimeWindow)",
          "adderAll": "addAllDisplayTimeWindow(List<DisplayTimeWindow>)"
        }
      }
    },
    "RecipeEntity": {
      "package": "com.google.android.engage.food.datamodel.RecipeEntity",
      "fields": {
        "entityId": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setEntityId(String)",
          "getter": "getEntityId()"
        },
        "actionLinkUri": {
          "type": "Uri",
          "requirement": "Required",
          "setter": "setActionLinkUri(Uri)",
          "getter": "getActionLinkUri()"
        },
        "posterImages": {
          "type": "List<Image>",
          "requirement": "Required",
          "adder": "addPosterImage(Image)",
          "getter": "getPosterImages()",
          "adderAll": "addPosterImages(List<Image>)"
        },
        "rating": {
          "type": "Rating",
          "requirement": "Optional",
          "setter": "setRating(Rating)",
          "getter": "getRating()",
          "requiredFor": [
            "Mutually required with other rating fields"
          ]
        },
        "title": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setTitle(String)",
          "getter": "getTitle()"
        },
        "author": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setAuthor(String)",
          "getter": "getAuthor()"
        },
        "category": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setCategory(String)",
          "getter": "getCategory()"
        },
        "callout": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setCallout(String)",
          "getter": "getCallout()"
        },
        "cookTime": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setCookTime(String)",
          "getter": "getCookTime()"
        },
        "description": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setDescription(String)",
          "getter": "getDescription()"
        }
      }
    }
  },
  "methods": {
    "isServiceAvailable": null,
    "publishRecommendationClusters": "PublishRecommendationClustersRequest",
    "publishFeaturedCluster": "PublishFeaturedClusterRequest",
    "publishFoodShoppingCarts": "PublishFoodShoppingCartsRequest",
    "publishReorderCluster": "PublishReorderClusterRequest",
    "publishFoodShoppingLists": "PublishFoodShoppingListsRequest",
    "publishUserAccountManagementRequest": "PublishUserAccountManagementRequest",
    "updatePublishStatus": "PublishStatusRequest",
    "deleteFoodShoppingCartCluster": "DeleteClustersRequest",
    "deleteFoodShoppingListCluster": "DeleteClustersRequest",
    "deleteReorderCluster": "DeleteClustersRequest",
    "deleteRecommendationsClusters": "DeleteClustersRequest",
    "deleteFeaturedCluster": "DeleteClustersRequest",
    "deleteUserManagementCluster": "DeleteClustersRequest"
  },
  "clusters": {
    "FoodReorderCluster": {
      "package": "com.google.android.engage.food.datamodel.FoodReorderCluster",
      "fields": {
        "title": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setTitle(String)",
          "getter": "getTitle()"
        },
        "actionText": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setActionText(String)",
          "getter": "getActionText()"
        },
        "posterImages": {
          "type": "List<Image>",
          "requirement": "Optional",
          "adder": "addPosterImage(Image)",
          "getter": "getPosterImages()",
          "adderAll": "addPosterImages(List<Image>)"
        },
        "itemLabels": {
          "type": "List<List<String>>",
          "requirement": "Optional",
          "adder": "addItemLabel(String)",
          "getter": "getItemLabels()",
          "adderAll": "addItemLabels(List<String>)"
        },
        "numberOfItems": {
          "type": "Integer",
          "requirement": "Optional",
          "setter": "setNumberOfItems(int)",
          "getter": "getNumberOfItems()"
        },
        "actionLinkUri": {
          "type": "Uri",
          "requirement": "Required",
          "setter": "setActionLinkUri(Uri)",
          "getter": "getActionLinkUri()"
        },
        "displayTimeWindows": {
          "type": "List<DisplayTimeWindow>",
          "requirement": "Optional",
          "adder": "addDisplayTimeWindow(DisplayTimeWindow)",
          "getter": "getDisplayTimeWindows()"
        },
        "allDisplayTimeWindows": {
          "type": "List<List<DisplayTimeWindow>>",
          "requirement": "Optional",
          "adder": "addAllDisplayTimeWindow(DisplayTimeWindow)",
          "adderAll": "addAllDisplayTimeWindow(List<DisplayTimeWindow>)"
        }
      }
    },
    "FoodShoppingList": {
      "package": "com.google.android.engage.food.datamodel.FoodShoppingList",
      "fields": {
        "title": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setTitle(String)",
          "getter": "getTitle()"
        },
        "actionText": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setActionText(String)",
          "getter": "getActionText()"
        },
        "posterImages": {
          "type": "List<Image>",
          "requirement": "Optional",
          "adder": "addPosterImage(Image)",
          "getter": "getPosterImages()",
          "adderAll": "addPosterImages(List<Image>)"
        },
        "itemLabels": {
          "type": "List<List<String>>",
          "requirement": "Optional",
          "adder": "addItemLabel(String)",
          "getter": "getItemLabels()",
          "adderAll": "addItemLabels(List<String>)"
        },
        "numberOfItems": {
          "type": "Integer",
          "requirement": "Optional",
          "setter": "setNumberOfItems(int)",
          "getter": "getNumberOfItems()"
        },
        "actionLinkUri": {
          "type": "Uri",
          "requirement": "Required",
          "setter": "setActionLinkUri(Uri)",
          "getter": "getActionLinkUri()"
        },
        "lastUserInteractionTimestampMillis": {
          "type": "Long",
          "requirement": "Optional",
          "setter": "setLastUserInteractionTimestampMillis(long)",
          "getter": "getLastUserInteractionTimestampMillis()"
        }
      }
    },
    "FoodShoppingCart": {
      "package": "com.google.android.engage.food.datamodel.FoodShoppingCart",
      "fields": {
        "title": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setTitle(String)",
          "getter": "getTitle()"
        },
        "actionText": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setActionText(String)",
          "getter": "getActionText()"
        },
        "posterImages": {
          "type": "List<Image>",
          "requirement": "Optional",
          "adder": "addPosterImage(Image)",
          "getter": "getPosterImages()",
          "adderAll": "addPosterImages(List<Image>)"
        },
        "itemLabels": {
          "type": "List<List<String>>",
          "requirement": "Optional",
          "adder": "addItemLabel(String)",
          "getter": "getItemLabels()",
          "adderAll": "addItemLabels(List<String>)"
        },
        "numberOfItems": {
          "type": "Integer",
          "requirement": "Optional",
          "setter": "setNumberOfItems(int)",
          "getter": "getNumberOfItems()"
        },
        "actionLinkUri": {
          "type": "Uri",
          "requirement": "Required",
          "setter": "setActionLinkUri(Uri)",
          "getter": "getActionLinkUri()"
        },
        "displayTimeWindows": {
          "type": "List<DisplayTimeWindow>",
          "requirement": "Optional",
          "adder": "addDisplayTimeWindow(DisplayTimeWindow)",
          "getter": "getDisplayTimeWindows()"
        },
        "allDisplayTimeWindows": {
          "type": "List<List<DisplayTimeWindow>>",
          "requirement": "Optional",
          "adder": "addAllDisplayTimeWindow(DisplayTimeWindow)",
          "adderAll": "addAllDisplayTimeWindow(List<DisplayTimeWindow>)"
        },
        "lastUserInteractionTimestampMillis": {
          "type": "Long",
          "requirement": "Optional",
          "setter": "setLastUserInteractionTimestampMillis(long)",
          "getter": "getLastUserInteractionTimestampMillis()"
        }
      }
    }
  },
  "intents": {
    "ACTION_PUBLISH_FOOD_SHOPPING_CART": "com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_CART",
    "ACTION_PUBLISH_FOOD_SHOPPING_LIST": "com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LIST",
    "ACTION_PUBLISH_REORDER_CLUSTER": "com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTER"
  }
}