---
title: "Get the best recommendation"
method: POST
path: "/recommendation-engine/product/actions/combine"
tags: ["Product recommendation engine"]
---

# Get the best recommendation

`POST /recommendation-engine/product/actions/combine`

It selects the best products from an initial list for the customer. Eliminates all products that don't match future customer preferences (depends on his previous shopping behavior). If needed, it fills the missing number of results from the best products depends on the prediction algorithms.

## Headers

- `Accept-Language` string

## Request body

- object
  - `customer_id` string, required — The unique ID of the customer.
  - `product_id_list` string[] — List of the product IDs. Initial products of the recommendation engine.
  - `count` integer — The number of records to return.

## Response `200`

OK

- object
  - `data` object
    - `recommended_products_list` RecommendedProduct[] — List of the recommended products.
      - `product_id` string — The unique ID of the product. [GET /products](https://carecloud.readme.io/reference/getproducts)
      - `plu_ids` PluId[] — An array of all available pluIds from the particular product lists (default is Product ID from Global product list (consist cleaned data - unique ID of every product across all POS systems)).
        - `list_code` string, required — Code of the particular product list (basic is code of Global product list (consist cleaned data - unique ID of every product across all POS systems)). For example, “GLOBAL”, “SKU”, “PLU”, etc.
        - `code` string, required — Code of product from the product list (basic is Product ID from Global product list (consist cleaned data - unique ID of every product across all POS systems)).
    - `total_items` integer — The number of all found product IDs.

## Other responses

- `400` — Bad input parameter. The response body's `error.error_data.invalid_params[]` array lists the parameters that caused the failure, each carrying a `reason` code. See the `BadRequestErrorBody` schema for the generic reason taxonomy. Operations with domain-specific business rules document additional reasons at the operation level.
- `401` — The client has invalid credentials or auth token.
- `403` — The client does not exist or the client tried to access an unauthorized property or resource.
- `404` — The resource was not found.
- `405` — The resource does not support the specified HTTP method.
- `429` — Too many requests - more than the resource limit.
- `500` — Server is not working as expected.
- `503` — Temporary state when the service is temporarily unavailable, overloaded or there is a maintenance window.

---

[API](https://skmtc.net/crmcarecloud/apis/rest-api-reference.md) · [All operations](https://skmtc.net/crmcarecloud/apis/rest-api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/crmcarecloud/rest-api-reference/revisions/329c06dbf8d9/schema)
