# tys.recommendations.create()

> handle comes from the browser SDK (await tys.recommendationHandle()), products are your SKUs / style IDs.

Source: https://docs.tryyoursize.com/reference/node/recommendations-create/

*Method* · `@tryyoursize/node`

`handle` comes from the browser SDK (`await tys.recommendationHandle()`), `products` are your SKUs / style IDs. Key scope: `fit_checks:read`.

```ts
create(params: RecommendationsRequest, options?: RequestOptions): Promise<RecommendationList>
```

## Parameters

- **`params`** (`RecommendationsRequest`, required)
  - **`handle`** (`string`, required): A recommendation handle from the browser SDK (`tys.recommendationHandle()`).
  - **`products`** (`string[]`, required): Product SKUs / style IDs (what you pass to the element as `product`).
- **`options`** (`RequestOptions`, optional)

## Returns

`Promise<RecommendationList>`: `{ data: ServerRecommendation[] }`, one per product, in your size labels. Sizes only, never measurements.

- **`product`** (`string`, required)
- **`status`** (`"ready" | "computing" | "none" | "unavailable"`, required): `ready`: a size. `computing`: a simulation the shopper started is running (ask again later). `none`: simulated, no size can be worn. `unavailable`: no published garment for this product, not simulated on this body yet, or the store's plan has no fit checks left. A page view or this API never starts a simulation.
- **`size`** (`string`, required): The recommended size in the store's label (the product's size map), or null.
- **`studio_size`** (`string`, required): The same size as entered in TryYourSize Studio, or null.
- **`wearable_sizes`** (`string[]`, required): Sizes that can be worn on this body, in the store's labels.
- **`tryon_id`** (`string`, optional): The try-on that produced the size, when there is one. Send it back with orders for attribution.

## Example

**Node.js**

```ts
// handle: from the browser SDK, `await tys.recommendationHandle()`, sent to your server
const { data } = await tys.recommendations.create({
  handle,
  products: ["SKU-123", "SKU-456"],
});
for (const r of data) {
  if (r.status === "ready") console.log(r.product, r.size, r.wearable_sizes);
}
```

**Python**

```python
answer = tys.recommendations.create(handle=handle, products=["SKU-123", "SKU-456"])
for rec in answer["data"]:
    if rec["status"] == "ready":
        print(rec["product"], rec["size"], rec["wearable_sizes"])
```

**cURL**

```bash
curl -X POST https://api.tryyoursize.com/v1/recommendations \
  -H "Authorization: Bearer $TRYYOURSIZE_SECRET_KEY" \
  -H "TYS-Version: 2026-10-25" \
  -H "Content-Type: application/json" \
  -d '{"handle":"tys_rh_…","products":["SKU-123","SKU-456"]}'
```

## See also

- [Server-side recommendations](https://docs.tryyoursize.com/guides/server-side-recommendations.md)
- [tys.recommendationHandle() (browser)](https://docs.tryyoursize.com/reference/web/client-recommendation-handle.md)
- [recommendations.create (HTTP API)](https://docs.tryyoursize.com/api/reference/operations/createrecommendations.md)
