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

{
  "client": "com.google.android.engage.shopping.service.AppEngageShoppingClient",
  "clusterTypes": [
    "TYPE_RECOMMENDATION",
    "TYPE_FEATURED",
    "TYPE_SHOPPING_CART",
    "TYPE_SHOPPING_LIST",
    "TYPE_SHOPPING_REORDER",
    "TYPE_SHOPPING_ORDER_TRACKING"
  ],
  "entities": {
    "ShoppingEntity": {
      "package": "com.google.android.engage.shopping.datamodel.ShoppingEntity",
      "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>)"
        },
        "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>)"
        },
        "actionLinkUri": {
          "type": "Uri",
          "requirement": "Required",
          "setter": "setActionLinkUri(Uri)",
          "getter": "getActionLinkUri()"
        },
        "title": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setTitle(String)",
          "getter": "getTitle()"
        },
        "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"
          ]
        },
        "rating": {
          "type": "Rating",
          "requirement": "Optional",
          "setter": "setRating(Rating)",
          "getter": "getRating()",
          "requiredFor": [
            "Required if strikethrough price is provided",
            "Mutually required with other rating fields"
          ]
        }
      }
    }
  },
  "methods": {
    "isServiceAvailable": null,
    "publishRecommendationClusters": "PublishRecommendationClustersRequest",
    "publishFeaturedCluster": "PublishFeaturedClusterRequest",
    "publishShoppingCart": "PublishShoppingCartClusterRequest",
    "publishShoppingLists": "PublishShoppingListsRequest",
    "publishShoppingReorderCluster": "PublishShoppingReorderClusterRequest",
    "publishShoppingOrderTrackingCluster": "PublishShoppingOrderTrackingClusterRequest",
    "publishUserAccountManagementRequest": "PublishUserAccountManagementRequest",
    "updatePublishStatus": "PublishStatusRequest",
    "deleteShoppingCartCluster": "DeleteClustersRequest",
    "deleteShoppingListCluster": "DeleteClustersRequest",
    "deleteReorderCluster": "DeleteClustersRequest",
    "deleteShoppingOrderTrackingCluster": "DeleteClustersRequest",
    "deleteRecommendationsClusters": "DeleteClustersRequest",
    "deleteFeaturedCluster": "DeleteClustersRequest",
    "deleteUserManagementCluster": "DeleteClustersRequest"
  },
  "clusters": {
    "ShoppingList": {
      "package": "com.google.android.engage.shopping.datamodel.ShoppingList",
      "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()"
        }
      }
    },
    "ShoppingReorderCluster": {
      "package": "com.google.android.engage.shopping.datamodel.ShoppingReorderCluster",
      "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>)"
        }
      }
    },
    "ShoppingCart": {
      "package": "com.google.android.engage.shopping.datamodel.ShoppingCart",
      "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()"
        }
      }
    },
    "ShoppingOrderTrackingCluster": {
      "package": "com.google.android.engage.shopping.datamodel.ShoppingOrderTrackingCluster",
      "fields": {
        "title": {
          "type": "String",
          "requirement": "Required",
          "setter": "setTitle(String)",
          "getter": "getTitle()"
        },
        "posterImages": {
          "type": "List<Image>",
          "requirement": "Optional",
          "adder": "addPosterImage(Image)",
          "getter": "getPosterImages()",
          "adderAll": "addPosterImages(List<Image>)"
        },
        "status": {
          "type": "String",
          "requirement": "Required",
          "setter": "setStatus(String)",
          "getter": "getStatus()"
        },
        "orderTime": {
          "type": "Long",
          "requirement": "Required",
          "setter": "setOrderTime(long)",
          "getter": "getOrderTime()"
        },
        "actionLinkUri": {
          "type": "Uri",
          "requirement": "Required",
          "setter": "setActionLinkUri(Uri)",
          "getter": "getActionLinkUri()"
        },
        "orderReadyTimeWindow": {
          "type": "OrderReadyTimeWindow",
          "requirement": "Optional",
          "setter": "setOrderReadyTimeWindow(OrderReadyTimeWindow)",
          "getter": "getOrderReadyTimeWindow()"
        },
        "numberOfItems": {
          "type": "Integer",
          "requirement": "Optional",
          "setter": "setNumberOfItems(Integer)",
          "getter": "getNumberOfItems()"
        },
        "orderDescription": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setOrderDescription(String)",
          "getter": "getOrderDescription()"
        },
        "subtitles": {
          "type": "List<String>",
          "requirement": "Optional",
          "adder": "addSubtitle(String)",
          "adderAll": "addSubtitles(List<String>)"
        },
        "orderValue": {
          "type": "Price",
          "requirement": "Optional",
          "setter": "setOrderValue(Price)",
          "getter": "getOrderValue()"
        },
        "shoppingOrderType": {
          "type": "@ShoppingOrderType int",
          "requirement": "Required",
          "setter": "setShoppingOrderType(@ShoppingOrderType int)",
          "getter": "getShoppingOrderType()"
        },
        "trackingId": {
          "type": "String",
          "requirement": "Optional",
          "setter": "setTrackingId(String)",
          "getter": "getTrackingId()"
        }
      }
    }
  },
  "intents": {
    "ACTION_PUBLISH_SHOPPING_CART": "com.google.android.engage.action.shopping.PUBLISH_SHOPPING_CART",
    "ACTION_PUBLISH_SHOPPING_LIST": "com.google.android.engage.action.shopping.PUBLISH_SHOPPING_LIST",
    "ACTION_PUBLISH_REORDER_CLUSTER": "com.google.android.engage.action.shopping.PUBLISH_REORDER_CLUSTER",
    "ACTION_PUBLISH_ORDER_TRACKING_CLUSTER": "com.google.android.engage.action.shopping.PUBLISH_ORDER_TRACKING_CLUSTER"
  }
}