<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="recommendationengine_v1beta1.html">Recommendations AI (Beta)</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html">eventStores</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.placements.html">placements</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#predict">predict(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Makes a recommendation prediction. If using API Key based authentication, the API Key must be registered using the PredictionApiKeyRegistry service. [Learn more](https://cloud.google.com/recommendations-ai/docs/setting-up#register-key).</p>
<p class="toc_element">
  <code><a href="#predict_next">predict_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="predict">predict(name, body=None, x__xgafv=None)</code>
  <pre>Makes a recommendation prediction. If using API Key based authentication, the API Key must be registered using the PredictionApiKeyRegistry service. [Learn more](https://cloud.google.com/recommendations-ai/docs/setting-up#register-key).

Args:
  name: string, Required. Full resource name of the format: `{name=projects/*/locations/global/catalogs/default_catalog/eventStores/default_event_store/placements/*}` The id of the recommendation engine placement. This id is used to identify the set of models that will be used to make the prediction. We currently support three placements with the following IDs by default: * `shopping_cart`: Predicts items frequently bought together with one or more catalog items in the same shopping session. Commonly displayed after `add-to-cart` events, on product detail pages, or on the shopping cart page. * `home_page`: Predicts the next product that a user will most likely engage with or purchase based on the shopping or viewing history of the specified `userId` or `visitorId`. For example - Recommendations for you. * `product_detail`: Predicts the next product that a user will most likely engage with or purchase. The prediction is based on the shopping or viewing history of the specified `userId` or `visitorId` and its relevance to a specified `CatalogItem`. Typically used on product detail pages. For example - More items like this. * `recently_viewed_default`: Returns up to 75 items recently viewed by the specified `userId` or `visitorId`, most recent ones first. Returns nothing if neither of them has viewed any items yet. For example - Recently viewed. The full list of available placements can be seen at https://console.cloud.google.com/recommendation/datafeeds/default_catalog/dashboard (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for Predict method.
  &quot;dryRun&quot;: True or False, # Optional. Use dryRun mode for this prediction query. If set to true, a dummy model will be used that returns arbitrary catalog items. Note that the dryRun mode should only be used for testing the API, or if the model is not ready.
  &quot;filter&quot;: &quot;A String&quot;, # Optional. Filter for restricting prediction results. Accepts values for tags and the `filterOutOfStockItems` flag. * Tag expressions. Restricts predictions to items that match all of the specified tags. Boolean operators `OR` and `NOT` are supported if the expression is enclosed in parentheses, and must be separated from the tag values by a space. `-&quot;tagA&quot;` is also supported and is equivalent to `NOT &quot;tagA&quot;`. Tag values must be double quoted UTF-8 encoded strings with a size limit of 1 KiB. * filterOutOfStockItems. Restricts predictions to items that do not have a stockState value of OUT_OF_STOCK. Examples: * tag=(&quot;Red&quot; OR &quot;Blue&quot;) tag=&quot;New-Arrival&quot; tag=(NOT &quot;promotional&quot;) * filterOutOfStockItems tag=(-&quot;promotional&quot;) * filterOutOfStockItems If your filter blocks all prediction results, nothing will be returned. If you want generic (unfiltered) popular items to be returned instead, set `strictFiltering` to false in `PredictRequest.params`.
  &quot;labels&quot;: { # Optional. The labels for the predict request. * Label keys can contain lowercase letters, digits and hyphens, must start with a letter, and must end with a letter or digit. * Non-zero label values can contain lowercase letters, digits and hyphens, must start with a letter, and must end with a letter or digit. * No more than 64 labels can be associated with a given request. See https://goo.gl/xmQnxf for more information on and examples of labels.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;pageSize&quot;: 42, # Optional. Maximum number of results to return per page. Set this property to the number of prediction results required. If zero, the service will choose a reasonable default.
  &quot;pageToken&quot;: &quot;A String&quot;, # Optional. The previous PredictResponse.next_page_token.
  &quot;params&quot;: { # Optional. Additional domain specific parameters for the predictions. Allowed values: * `returnCatalogItem`: Boolean. If set to true, the associated catalogItem object will be returned in the `PredictResponse.PredictionResult.itemMetadata` object in the method response. * `returnItemScore`: Boolean. If set to true, the prediction &#x27;score&#x27; corresponding to each returned item will be set in the `metadata` field in the prediction response. The given &#x27;score&#x27; indicates the probability of an item being clicked/purchased given the user&#x27;s context and history. * `strictFiltering`: Boolean. True by default. If set to false, the service will return generic (unfiltered) popular items instead of empty if your filter blocks all prediction results. * `priceRerankLevel`: String. Default empty. If set to be non-empty, then it needs to be one of {&#x27;no-price-reranking&#x27;, &#x27;low-price-reranking&#x27;, &#x27;medium-price-reranking&#x27;, &#x27;high-price-reranking&#x27;}. This gives request level control and adjust prediction results based on product price. * `diversityLevel`: String. Default empty. If set to be non-empty, then it needs to be one of {&#x27;no-diversity&#x27;, &#x27;low-diversity&#x27;, &#x27;medium-diversity&#x27;, &#x27;high-diversity&#x27;, &#x27;auto-diversity&#x27;}. This gives request level control and adjust prediction results based on product category.
    &quot;a_key&quot;: &quot;&quot;,
  },
  &quot;userEvent&quot;: { # UserEvent captures all metadata information recommendation engine needs to know about how end users interact with customers&#x27; website. # Required. Context about the user, what they are looking at and what action they took to trigger the predict request. Note that this user event detail won&#x27;t be ingested to userEvent logs. Thus, a separate userEvent write request is required for event logging.
    &quot;eventDetail&quot;: { # User event details shared by all recommendation types. # Optional. User event detailed information common across different recommendation types.
      &quot;eventAttributes&quot;: { # FeatureMap represents extra features that customers want to include in the recommendation model for catalogs/user events as categorical/numerical features. # Optional. Extra user event features to include in the recommendation model. For product recommendation, an example of extra user information is traffic_channel, i.e. how user arrives at the site. Users can arrive at the site by coming to the site directly, or coming through Google search, and etc.
        &quot;categoricalFeatures&quot;: { # Categorical features that can take on one of a limited number of possible values. Some examples would be the brand/maker of a product, or country of a customer. Feature names and values must be UTF-8 encoded strings. For example: `{ &quot;colors&quot;: {&quot;value&quot;: [&quot;yellow&quot;, &quot;green&quot;]}, &quot;sizes&quot;: {&quot;value&quot;:[&quot;S&quot;, &quot;M&quot;]}`
          &quot;a_key&quot;: { # A list of string features.
            &quot;value&quot;: [ # String feature value with a length limit of 128 bytes.
              &quot;A String&quot;,
            ],
          },
        },
        &quot;numericalFeatures&quot;: { # Numerical features. Some examples would be the height/weight of a product, or age of a customer. Feature names must be UTF-8 encoded strings. For example: `{ &quot;lengths_cm&quot;: {&quot;value&quot;:[2.3, 15.4]}, &quot;heights_cm&quot;: {&quot;value&quot;:[8.1, 6.4]} }`
          &quot;a_key&quot;: { # A list of float features.
            &quot;value&quot;: [ # Float feature value.
              3.14,
            ],
          },
        },
      },
      &quot;experimentIds&quot;: [ # Optional. A list of identifiers for the independent experiment groups this user event belongs to. This is used to distinguish between user events associated with different experiment setups (e.g. using Recommendation Engine system, using different recommendation models).
        &quot;A String&quot;,
      ],
      &quot;pageViewId&quot;: &quot;A String&quot;, # Optional. A unique id of a web page view. This should be kept the same for all user events triggered from the same pageview. For example, an item detail page view could trigger multiple events as the user is browsing the page. The `pageViewId` property should be kept the same for all these events so that they can be grouped together properly. This `pageViewId` will be automatically generated if using the JavaScript pixel.
      &quot;recommendationToken&quot;: &quot;A String&quot;, # Optional. Recommendation token included in the recommendation prediction response. This field enables accurate attribution of recommendation model performance. This token enables us to accurately attribute page view or purchase back to the event and the particular predict response containing this clicked/purchased item. If user clicks on product K in the recommendation results, pass the `PredictResponse.recommendationToken` property as a url parameter to product K&#x27;s page. When recording events on product K&#x27;s page, log the PredictResponse.recommendation_token to this field. Optional, but highly encouraged for user events that are the result of a recommendation prediction query.
      &quot;referrerUri&quot;: &quot;A String&quot;, # Optional. The referrer url of the current page. When using the JavaScript pixel, this value is filled in automatically.
      &quot;uri&quot;: &quot;A String&quot;, # Optional. Complete url (window.location.href) of the user&#x27;s current page. When using the JavaScript pixel, this value is filled in automatically. Maximum length 5KB.
    },
    &quot;eventSource&quot;: &quot;A String&quot;, # Optional. This field should *not* be set when using JavaScript pixel or the Recommendations AI Tag. Defaults to `EVENT_SOURCE_UNSPECIFIED`.
    &quot;eventTime&quot;: &quot;A String&quot;, # Optional. Only required for ImportUserEvents method. Timestamp of user event created.
    &quot;eventType&quot;: &quot;A String&quot;, # Required. User event type. Allowed values are: * `add-to-cart` Products being added to cart. * `add-to-list` Items being added to a list (shopping list, favorites etc). * `category-page-view` Special pages such as sale or promotion pages viewed. * `checkout-start` User starting a checkout process. * `detail-page-view` Products detail page viewed. * `home-page-view` Homepage viewed. * `page-visit` Generic page visits not included in the event types above. * `purchase-complete` User finishing a purchase. * `refund` Purchased items being refunded or returned. * `remove-from-cart` Products being removed from cart. * `remove-from-list` Items being removed from a list. * `search` Product search. * `shopping-cart-page-view` User viewing a shopping cart. * `impression` List of items displayed. Used by Google Tag Manager.
    &quot;productEventDetail&quot;: { # ProductEventDetail captures user event information specific to retail products. # Optional. Retail product specific user event metadata. This field is required for the following event types: * `add-to-cart` * `add-to-list` * `category-page-view` * `checkout-start` * `detail-page-view` * `purchase-complete` * `refund` * `remove-from-cart` * `remove-from-list` * `search` This field is optional for the following event types: * `page-visit` * `shopping-cart-page-view` - note that &#x27;product_event_detail&#x27; should be set for this unless the shopping cart is empty. This field is not allowed for the following event types: * `home-page-view`
      &quot;cartId&quot;: &quot;A String&quot;, # Optional. The id or name of the associated shopping cart. This id is used to associate multiple items added or present in the cart before purchase. This can only be set for `add-to-cart`, `remove-from-cart`, `checkout-start`, `purchase-complete`, or `shopping-cart-page-view` events.
      &quot;listId&quot;: &quot;A String&quot;, # Required for `add-to-list` and `remove-from-list` events. The id or name of the list that the item is being added to or removed from. Other event types should not set this field.
      &quot;pageCategories&quot;: [ # Required for `category-page-view` events. At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [&quot;Sales&quot;, &quot;2017 Black Friday Deals&quot;].
        { # Category represents catalog item category hierarchy.
          &quot;categories&quot;: [ # Required. Catalog item categories. Each category should be a UTF-8 encoded string with a length limit of 2 KiB. Note that the order in the list denotes the specificity (from least to most specific).
            &quot;A String&quot;,
          ],
        },
      ],
      &quot;productDetails&quot;: [ # The main product details related to the event. This field is required for the following event types: * `add-to-cart` * `add-to-list` * `checkout-start` * `detail-page-view` * `purchase-complete` * `refund` * `remove-from-cart` * `remove-from-list` This field is optional for the following event types: * `page-visit` * `shopping-cart-page-view` - note that &#x27;product_details&#x27; should be set for this unless the shopping cart is empty. * `search` (highly encouraged) In a `search` event, this field represents the products returned to the end user on the current page (the end user may have not finished broswing the whole page yet). When a new page is returned to the end user, after pagination/filtering/ordering even for the same query, a new SEARCH event with different product_details is desired. The end user may have not finished broswing the whole page yet. This field is not allowed for the following event types: * `category-page-view` * `home-page-view`
        { # Detailed product information associated with a user event.
          &quot;availableQuantity&quot;: 42, # Optional. Quantity of the products in stock when a user event happens. Optional. If provided, this overrides the available quantity in Catalog for this event. and can only be set if `stock_status` is set to `IN_STOCK`. Note that if an item is out of stock, you must set the `stock_state` field to be `OUT_OF_STOCK`. Leaving this field unspecified / as zero is not sufficient to mark the item out of stock.
          &quot;currencyCode&quot;: &quot;A String&quot;, # Optional. Currency code for price/costs. Use three-character ISO-4217 code. Required only if originalPrice or displayPrice is set.
          &quot;displayPrice&quot;: 3.14, # Optional. Display price of the product (e.g. discounted price). If provided, this will override the display price in Catalog for this product.
          &quot;id&quot;: &quot;A String&quot;, # Required. Catalog item ID. UTF-8 encoded string with a length limit of 128 characters.
          &quot;itemAttributes&quot;: { # FeatureMap represents extra features that customers want to include in the recommendation model for catalogs/user events as categorical/numerical features. # Optional. Extra features associated with a product in the user event.
            &quot;categoricalFeatures&quot;: { # Categorical features that can take on one of a limited number of possible values. Some examples would be the brand/maker of a product, or country of a customer. Feature names and values must be UTF-8 encoded strings. For example: `{ &quot;colors&quot;: {&quot;value&quot;: [&quot;yellow&quot;, &quot;green&quot;]}, &quot;sizes&quot;: {&quot;value&quot;:[&quot;S&quot;, &quot;M&quot;]}`
              &quot;a_key&quot;: { # A list of string features.
                &quot;value&quot;: [ # String feature value with a length limit of 128 bytes.
                  &quot;A String&quot;,
                ],
              },
            },
            &quot;numericalFeatures&quot;: { # Numerical features. Some examples would be the height/weight of a product, or age of a customer. Feature names must be UTF-8 encoded strings. For example: `{ &quot;lengths_cm&quot;: {&quot;value&quot;:[2.3, 15.4]}, &quot;heights_cm&quot;: {&quot;value&quot;:[8.1, 6.4]} }`
              &quot;a_key&quot;: { # A list of float features.
                &quot;value&quot;: [ # Float feature value.
                  3.14,
                ],
              },
            },
          },
          &quot;originalPrice&quot;: 3.14, # Optional. Original price of the product. If provided, this will override the original price in Catalog for this product.
          &quot;quantity&quot;: 42, # Optional. Quantity of the product associated with the user event. For example, this field will be 2 if two products are added to the shopping cart for `add-to-cart` event. Required for `add-to-cart`, `add-to-list`, `remove-from-cart`, `checkout-start`, `purchase-complete`, `refund` event types.
          &quot;stockState&quot;: &quot;A String&quot;, # Optional. Item stock state. If provided, this overrides the stock state in Catalog for items in this event.
        },
      ],
      &quot;purchaseTransaction&quot;: { # A transaction represents the entire purchase transaction. # Optional. A transaction represents the entire purchase transaction. Required for `purchase-complete` events. Optional for `checkout-start` events. Other event types should not set this field.
        &quot;costs&quot;: { # Optional. All the costs associated with the product. These can be manufacturing costs, shipping expenses not borne by the end user, or any other costs. Total product cost such that profit = revenue - (sum(taxes) + sum(costs)) If product_cost is not set, then profit = revenue - tax - shipping - sum(CatalogItem.costs). If CatalogItem.cost is not specified for one of the items, CatalogItem.cost based profit *cannot* be calculated for this Transaction.
          &quot;a_key&quot;: 3.14,
        },
        &quot;currencyCode&quot;: &quot;A String&quot;, # Required. Currency code. Use three-character ISO-4217 code. This field is not required if the event type is `refund`.
        &quot;id&quot;: &quot;A String&quot;, # Optional. The transaction ID with a length limit of 128 bytes.
        &quot;revenue&quot;: 3.14, # Required. Total revenue or grand total associated with the transaction. This value include shipping, tax, or other adjustments to total revenue that you want to include as part of your revenue calculations. This field is not required if the event type is `refund`.
        &quot;taxes&quot;: { # Optional. All the taxes associated with the transaction.
          &quot;a_key&quot;: 3.14,
        },
      },
      &quot;searchQuery&quot;: &quot;A String&quot;, # At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The user&#x27;s search query as UTF-8 encoded text with a length limit of 5 KiB.
    },
    &quot;userInfo&quot;: { # Information of end users. # Required. User information.
      &quot;directUserRequest&quot;: True or False, # Optional. Indicates if the request is made directly from the end user in which case the user_agent and ip_address fields can be populated from the HTTP request. This should *not* be set when using the javascript pixel. This flag should be set only if the API request is made directly from the end user such as a mobile app (and not if a gateway or a server is processing and pushing the user events).
      &quot;ipAddress&quot;: &quot;A String&quot;, # Optional. IP address of the user. This could be either IPv4 (e.g. 104.133.9.80) or IPv6 (e.g. 2001:0db8:85a3:0000:0000:8a2e:0370:7334). This should *not* be set when using the javascript pixel or if `direct_user_request` is set. Used to extract location information for personalization.
      &quot;userAgent&quot;: &quot;A String&quot;, # Optional. User agent as included in the HTTP header. UTF-8 encoded string with a length limit of 1 KiB. This should *not* be set when using the JavaScript pixel or if `directUserRequest` is set.
      &quot;userId&quot;: &quot;A String&quot;, # Optional. Unique identifier for logged-in user with a length limit of 128 bytes. Required only for logged-in users.
      &quot;visitorId&quot;: &quot;A String&quot;, # Required. A unique identifier for tracking visitors with a length limit of 128 bytes. For example, this could be implemented with a http cookie, which should be able to uniquely identify a visitor on a single device. This unique identifier should not change if the visitor log in/out of the website. Maximum length 128 bytes. Cannot be empty.
    },
  },
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for predict method.
  &quot;dryRun&quot;: True or False, # True if the dryRun property was set in the request.
  &quot;itemsMissingInCatalog&quot;: [ # IDs of items in the request that were missing from the catalog.
    &quot;A String&quot;,
  ],
  &quot;metadata&quot;: { # Additional domain specific prediction response metadata.
    &quot;a_key&quot;: &quot;&quot;,
  },
  &quot;nextPageToken&quot;: &quot;A String&quot;, # If empty, the list is complete. If nonempty, the token to pass to the next request&#x27;s PredictRequest.page_token.
  &quot;recommendationToken&quot;: &quot;A String&quot;, # A unique recommendation token. This should be included in the user event logs resulting from this recommendation, which enables accurate attribution of recommendation model performance.
  &quot;results&quot;: [ # A list of recommended items. The order represents the ranking (from the most relevant item to the least).
    { # PredictionResult represents the recommendation prediction results.
      &quot;id&quot;: &quot;A String&quot;, # ID of the recommended catalog item
      &quot;itemMetadata&quot;: { # Additional item metadata / annotations. Possible values: * `catalogItem`: JSON representation of the catalogItem. Will be set if `returnCatalogItem` is set to true in `PredictRequest.params`. * `score`: Prediction score in double value. Will be set if `returnItemScore` is set to true in `PredictRequest.params`.
        &quot;a_key&quot;: &quot;&quot;,
      },
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="predict_next">predict_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>